[MacPorts] #41077: mod_jk fails with "source and destination buffer overlap" on Maverick

MacPorts noreply at macports.org
Wed Oct 30 04:54:32 PDT 2013


#41077: mod_jk fails with "source and destination buffer overlap" on Maverick
----------------------+--------------------------------
 Reporter:  girgen@…  |      Owner:  macports-tickets@…
     Type:  defect    |     Status:  new
 Priority:  High      |  Milestone:
Component:  ports     |    Version:  2.2.1
 Keywords:            |       Port:  mod_jk
----------------------+--------------------------------
 Apple appears to have made strcpy() enforce that the src and dest buffers
 may not overlap.

 This makes mod_jk fail. There is a patch upstreams alread.
 [https://issues.apache.org/bugzilla/show_bug.cgi?id=55696]

 This patch to the macport just uses the referred patch. Also, set
 JAVA_HOME using /usr/libexec/java_home for convenience.


 {{{
 --- Portfile.orig       2013-10-30 12:40:54.000000000 +0100
 +++ Portfile    2013-10-30 12:43:02.000000000 +0100
 @@ -4,6 +4,7 @@

  name                           mod_jk
  version                                1.2.27
 +revision                       1

  categories                     www java
  license                                Apache-2 BSD
 @@ -39,7 +40,7 @@
  if { [llength [array get env "JAVA_HOME"]] > 0 } {
         set javahome $env(JAVA_HOME)
  } else {
 -       set javahome ""
 +       set javahome [exec /usr/libexec/java_home]
  }
  if { ![file isdirectory ${javahome}] } {
         if { ${os.platform} == "darwin" } {
 @@ -72,6 +73,7 @@
         }
  }

 +patchfiles-append jk_map.c.patch
  if {[variant_isset universal]} {
      patchfiles-append   configure_universal.patch
      post-configure {
 --- /dev/null   2013-10-30 12:43:06.000000000 +0100
 +++ files/jk_map.c.patch        2013-10-30 12:42:02.000000000 +0100
 @@ -0,0 +1,62 @@
 +Index: common/jk_map.c
 +===================================================================
 +--- common/jk_map.c    (revision 1535519)
 ++++ common/jk_map.c    (working copy)
 +@@ -183,33 +183,37 @@
 +
 + int jk_map_get_int(jk_map_t *m, const char *name, int def)
 + {
 +-    char buf[100];
 +     const char *rc;
 +-    size_t len;
 +     int int_res;
 +-    int multit = 1;
 +
 +-    sprintf(buf, "%d", def);
 +-    rc = jk_map_get_string(m, name, buf);
 ++    rc = jk_map_get_string(m, name, NULL);
 +
 +-    len = strlen(rc);
 +-    if (len) {
 +-        char *lastchar = &buf[0] + len - 1;
 +-        strcpy(buf, rc);
 +-        if ('m' == *lastchar || 'M' == *lastchar) {
 +-            *lastchar = '\0';
 +-            multit = 1024 * 1024;
 ++    if(NULL == rc) {
 ++        int_res = def;
 ++    } else {
 ++        size_t len = strlen(rc);
 ++        int multit = 1;
 ++
 ++        if (len) {
 ++            char buf[100];
 ++            char *lastchar;
 ++            strncpy(buf, rc, 100);
 ++          lastchar = buf + len - 1;
 ++            if ('m' == *lastchar || 'M' == *lastchar) {
 ++                *lastchar = '\0';
 ++                multit = 1024 * 1024;
 ++            }
 ++            else if ('k' == *lastchar || 'K' == *lastchar) {
 ++                *lastchar = '\0';
 ++                multit = 1024;
 ++            }
 ++            int_res = multit * atoi(buf);
 +         }
 +-        else if ('k' == *lastchar || 'K' == *lastchar) {
 +-            *lastchar = '\0';
 +-            multit = 1024;
 +-        }
 +-        int_res = atoi(buf);
 ++        else
 ++            int_res = def;
 +     }
 +-    else
 +-        int_res = def;
 +
 +-    return int_res * multit;
 ++    return int_res;
 + }
 +
 + double jk_map_get_double(jk_map_t *m, const char *name, double def)

 }}}

-- 
Ticket URL: <https://trac.macports.org/ticket/41077>
MacPorts <http://www.macports.org/>
Ports system for OS X


More information about the macports-tickets mailing list