Package: libjson0
Version: 0.10-1.1
Severity: important

If the input JSON contains empty value (i.e. "") The internal string
buffer is unterminated and unexpected behaviour occours.

If the unicode value \u0000 appears in the input the string is
terminated early and the string is truncated.

The attached patch fixes these issues.

-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libjson0 depends on:
ii  libc6              2.13-33
ii  multiarch-support  2.13-33

libjson0 recommends no packages.

libjson0 suggests no packages.

-- no debconf information
Index: json-c-0.10/json_object.c
===================================================================
--- json-c-0.10.orig/json_object.c      2012-04-29 10:55:43.000000000 -0700
+++ json-c-0.10/json_object.c   2012-08-30 11:26:08.000000000 -0700
@@ -531,8 +531,9 @@
   if(!jso) return NULL;
   jso->_delete = &json_object_string_delete;
   jso->_to_json_string = &json_object_string_to_json_string;
-  jso->o.c_string.str = malloc(len);
+  jso->o.c_string.str = malloc(len + 1);
   memcpy(jso->o.c_string.str, (void *)s, len);
+  jso->o.c_string.str[len] = '\0';
   jso->o.c_string.len = len;
   return jso;
 }
Index: json-c-0.10/json_tokener.c
===================================================================
--- json-c-0.10.orig/json_tokener.c     2012-04-29 10:55:43.000000000 -0700
+++ json-c-0.10/json_tokener.c  2012-08-30 11:22:29.000000000 -0700
@@ -387,7 +387,7 @@
        while(1) {
          if(c == tok->quote_char) {
            printbuf_memappend_fast(tok->pb, case_start, str-case_start);
-           current = json_object_new_string(tok->pb->buf);
+           current = json_object_new_string_len(tok->pb->buf, tok->pb->bpos);
            saved_state = json_tokener_state_finish;
            state = json_tokener_state_eatws;
            break;

Reply via email to