From 40ccc8ce7c2008892d6ac1c12816438fd71b90cb Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sat, 19 Nov 2022 20:14:14 +0100 Subject: filemap xattr: use sqfs_u8 data type for xattr value blobs The xattr values are not strings, they are arbitrary byte blobs. To be on the safe side tough, we should still allocate the space for the extra null byte and propperly initialize the buffer. Signed-off-by: David Oberhollenzer --- bin/gensquashfs/filemap_xattr.c | 18 ++++++++++-------- bin/gensquashfs/mkfs.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/bin/gensquashfs/filemap_xattr.c b/bin/gensquashfs/filemap_xattr.c index e5a16be..a6919b6 100644 --- a/bin/gensquashfs/filemap_xattr.c +++ b/bin/gensquashfs/filemap_xattr.c @@ -11,16 +11,17 @@ #define NEW_FILE_START "# file: " // Taken from attr-2.5.1/tools/setfattr.c -static char * -decode(const char *value, size_t *size) { - char *decoded = NULL; +static sqfs_u8 *decode(const char *value, size_t *size) +{ + sqfs_u8 *decoded = NULL; if (*size == 0) - return strdup(""); + return (sqfs_u8 *)strdup(""); + if (value[0] == '0' && (value[1] == 'x' || value[1] == 'X')) { *size = ((*size) - 2) / 2; - decoded = realloc(decoded, *size); + decoded = calloc(1, (*size) + 1); if (decoded == NULL) { return NULL; } @@ -35,7 +36,7 @@ decode(const char *value, size_t *size) { *size = (input_len / 4) * 3; - decoded = realloc(decoded, *size); + decoded = calloc(1, (*size) + 1); if (decoded == NULL) { return NULL; } @@ -47,17 +48,18 @@ decode(const char *value, size_t *size) { } } else { const char *v = value, *end = value + *size; - char *d; + sqfs_u8 *d; if (end > v + 1 && *v == '"' && *(end - 1) == '"') { v++; end--; } - decoded = realloc(decoded, *size); + decoded = calloc(1, (*size) + 1); if (decoded == NULL) { return NULL; } + d = decoded; while (v < end) { diff --git a/bin/gensquashfs/mkfs.h b/bin/gensquashfs/mkfs.h index 960a31c..33ba707 100644 --- a/bin/gensquashfs/mkfs.h +++ b/bin/gensquashfs/mkfs.h @@ -64,7 +64,7 @@ typedef struct { struct XattrMapEntry { char *key; - char *value; + sqfs_u8 *value; size_t value_len; struct XattrMapEntry *next; }; -- cgit v1.2.3