summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2022-11-19 20:14:14 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2022-11-21 15:25:53 +0100
commit40ccc8ce7c2008892d6ac1c12816438fd71b90cb (patch)
tree462dd17bc59abefa6cf9547ccfa8f963426f8351
parent7bf4cc03d379bdd71c61982abde2355c578e4ef2 (diff)
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 <david.oberhollenzer@sigma-star.at>
-rw-r--r--bin/gensquashfs/filemap_xattr.c18
-rw-r--r--bin/gensquashfs/mkfs.h2
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;
};