projects
/
project
/
libubox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
udebug: add more checks for uninitialized buffers
[project/libubox.git]
/
blobmsg_json.c
diff --git
a/blobmsg_json.c
b/blobmsg_json.c
index 59a4b3183d8cc448d67fbd66f3e0fb32a4f83622..ec8b482c30c96a355aca58651632bc509a16bedf 100644
(file)
--- a/
blobmsg_json.c
+++ b/
blobmsg_json.c
@@
-66,9
+66,15
@@
bool blobmsg_add_json_element(struct blob_buf *b, const char *name, json_object
case json_type_boolean:
blobmsg_add_u8(b, name, json_object_get_boolean(obj));
break;
case json_type_boolean:
blobmsg_add_u8(b, name, json_object_get_boolean(obj));
break;
- case json_type_int:
- blobmsg_add_u32(b, name, json_object_get_int(obj));
+ case json_type_int: {
+ int64_t i64 = json_object_get_int64(obj);
+ if (i64 >= INT32_MIN && i64 <= INT32_MAX) {
+ blobmsg_add_u32(b, name, (uint32_t)i64);
+ } else {
+ blobmsg_add_u64(b, name, (uint64_t)i64);
+ }
break;
break;
+ }
case json_type_double:
blobmsg_add_double(b, name, json_object_get_double(obj));
break;
case json_type_double:
blobmsg_add_double(b, name, json_object_get_double(obj));
break;
@@
-145,15
+151,15
@@
static bool blobmsg_puts(struct strbuf *s, const char *c, int len)
static void add_separator(struct strbuf *s)
{
static void add_separator(struct strbuf *s)
{
- const char
*indent_chars
= "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
-
in
t len;
+ const char
indent_chars[]
= "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
+
size_
t len;
if (!s->indent)
return;
len = s->indent_level + 1;
if (!s->indent)
return;
len = s->indent_level + 1;
- if (len > s
trlen(indent_chars)
)
- len = s
trlen(indent_chars)
;
+ if (len > s
izeof(indent_chars) - 1
)
+ len = s
izeof(indent_chars) - 1
;
blobmsg_puts(s, indent_chars, len);
}
blobmsg_puts(s, indent_chars, len);
}
@@
-202,7
+208,7
@@
static void blobmsg_format_string(struct strbuf *s, const char *str)
buf[1] = escape;
if (escape == 'u') {
buf[1] = escape;
if (escape == 'u') {
- s
printf(buf +
4, "%02x", (unsigned char) *p);
+ s
nprintf(buf + 4, sizeof(buf) -
4, "%02x", (unsigned char) *p);
len = 6;
} else {
len = 2;
len = 6;
} else {
len = 2;
@@
-219,7
+225,7
@@
static void blobmsg_format_json_list(struct strbuf *s, struct blob_attr *attr, i
static void blobmsg_format_element(struct strbuf *s, struct blob_attr *attr, bool without_name, bool head)
{
const char *data_str;
static void blobmsg_format_element(struct strbuf *s, struct blob_attr *attr, bool without_name, bool head)
{
const char *data_str;
- char buf[3
2
];
+ char buf[3
17
];
void *data;
int len;
void *data;
int len;
@@
-243,22
+249,22
@@
static void blobmsg_format_element(struct strbuf *s, struct blob_attr *attr, boo
data_str = buf;
switch(blob_id(attr)) {
case BLOBMSG_TYPE_UNSPEC:
data_str = buf;
switch(blob_id(attr)) {
case BLOBMSG_TYPE_UNSPEC:
- s
printf(buf
, "null");
+ s
nprintf(buf, sizeof(buf)
, "null");
break;
case BLOBMSG_TYPE_BOOL:
break;
case BLOBMSG_TYPE_BOOL:
- s
printf(buf
, "%s", *(uint8_t *)data ? "true" : "false");
+ s
nprintf(buf, sizeof(buf)
, "%s", *(uint8_t *)data ? "true" : "false");
break;
case BLOBMSG_TYPE_INT16:
break;
case BLOBMSG_TYPE_INT16:
- s
printf(buf, "%d",
be16_to_cpu(*(uint16_t *)data));
+ s
nprintf(buf, sizeof(buf), "%" PRId16, (int16_t)
be16_to_cpu(*(uint16_t *)data));
break;
case BLOBMSG_TYPE_INT32:
break;
case BLOBMSG_TYPE_INT32:
- s
printf(buf, "%d"
, (int32_t) be32_to_cpu(*(uint32_t *)data));
+ s
nprintf(buf, sizeof(buf), "%" PRId32
, (int32_t) be32_to_cpu(*(uint32_t *)data));
break;
case BLOBMSG_TYPE_INT64:
break;
case BLOBMSG_TYPE_INT64:
- s
printf(buf
, "%" PRId64, (int64_t) be64_to_cpu(*(uint64_t *)data));
+ s
nprintf(buf, sizeof(buf)
, "%" PRId64, (int64_t) be64_to_cpu(*(uint64_t *)data));
break;
case BLOBMSG_TYPE_DOUBLE:
break;
case BLOBMSG_TYPE_DOUBLE:
- s
printf(buf
, "%lf", blobmsg_get_double(attr));
+ s
nprintf(buf, sizeof(buf)
, "%lf", blobmsg_get_double(attr));
break;
case BLOBMSG_TYPE_STRING:
blobmsg_format_string(s, data);
break;
case BLOBMSG_TYPE_STRING:
blobmsg_format_string(s, data);
@@
-279,7
+285,7
@@
static void blobmsg_format_json_list(struct strbuf *s, struct blob_attr *attr, i
{
struct blob_attr *pos;
bool first = true;
{
struct blob_attr *pos;
bool first = true;
-
in
t rem = len;
+
size_
t rem = len;
blobmsg_puts(s, (array ? "[" : "{" ), 1);
s->indent_level++;
blobmsg_puts(s, (array ? "[" : "{" ), 1);
s->indent_level++;
@@
-315,7
+321,7
@@
static void setup_strbuf(struct strbuf *s, struct blob_attr *attr, blobmsg_json_
char *blobmsg_format_json_with_cb(struct blob_attr *attr, bool list, blobmsg_json_format_t cb, void *priv, int indent)
{
char *blobmsg_format_json_with_cb(struct blob_attr *attr, bool list, blobmsg_json_format_t cb, void *priv, int indent)
{
- struct strbuf s;
+ struct strbuf s
= {0}
;
bool array;
char *ret;
bool array;
char *ret;
@@
-349,7
+355,7
@@
char *blobmsg_format_json_with_cb(struct blob_attr *attr, bool list, blobmsg_jso
char *blobmsg_format_json_value_with_cb(struct blob_attr *attr, blobmsg_json_format_t cb, void *priv, int indent)
{
char *blobmsg_format_json_value_with_cb(struct blob_attr *attr, blobmsg_json_format_t cb, void *priv, int indent)
{
- struct strbuf s;
+ struct strbuf s
= {0}
;
char *ret;
setup_strbuf(&s, attr, cb, priv, indent);
char *ret;
setup_strbuf(&s, attr, cb, priv, indent);