X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib%2Fhashtable.c;h=02b41050a44f6656e9605e288f5f6a97faf3539c;hb=f7cf291aa788eb5b64c0d16de529b1a378f509bb;hp=18ed5901ec284b63150435bf5af9b8db6b42d373;hpb=c23154aab5825fec81d5500c53eaa686646c76b5;p=u-boot diff --git a/lib/hashtable.c b/lib/hashtable.c index 18ed5901ec..02b41050a4 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -789,12 +789,13 @@ int himport_r(struct hsearch_data *htab, } /* we allocate new space to make sure we can write to the array */ - if ((data = malloc(size)) == NULL) { - debug("himport_r: can't malloc %zu bytes\n", size); + if ((data = malloc(size + 1)) == NULL) { + debug("himport_r: can't malloc %zu bytes\n", size + 1); __set_errno(ENOMEM); return 0; } memcpy(data, env, size); + data[size] = '\0'; dp = data; /* make a local copy of the list of variables */ @@ -841,8 +842,10 @@ int himport_r(struct hsearch_data *htab, } } - if(!size) + if (!size) { + free(data); return 1; /* everything OK */ + } if(crlf_is_lf) { /* Remove Carriage Returns in front of Line Feeds */ unsigned ignored_crs = 0; @@ -906,6 +909,7 @@ int himport_r(struct hsearch_data *htab, if (*name == 0) { debug("INSERT: unable to use an empty key\n"); __set_errno(EINVAL); + free(data); return 0; }