git.annexia.org
/
libguestfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix error handling in 'zero' function.
[libguestfs.git]
/
hivex
/
hivex.c
diff --git
a/hivex/hivex.c
b/hivex/hivex.c
index
85d6c7b
..
e47dd23
100644
(file)
--- a/
hivex/hivex.c
+++ b/
hivex/hivex.c
@@
-30,7
+30,6
@@
#include <iconv.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <iconv.h>
#include <sys/mman.h>
#include <sys/stat.h>
-#include <assert.h>
#ifdef HAVE_ENDIAN_H
#include <endian.h>
#endif
#ifdef HAVE_ENDIAN_H
#include <endian.h>
#endif
@@
-45,9
+44,15
@@
#ifndef be64toh
#define be64toh(x) __bswap_64 (x)
#endif
#ifndef be64toh
#define be64toh(x) __bswap_64 (x)
#endif
+#ifndef le16toh
+#define le16toh(x) (x)
+#endif
#ifndef le32toh
#define le32toh(x) (x)
#endif
#ifndef le32toh
#define le32toh(x) (x)
#endif
+#ifndef le64toh
+#define le64toh(x) (x)
+#endif
#else
#ifndef be32toh
#define be32toh(x) (x)
#else
#ifndef be32toh
#define be32toh(x) (x)
@@
-55,9
+60,15
@@
#ifndef be64toh
#define be64toh(x) (x)
#endif
#ifndef be64toh
#define be64toh(x) (x)
#endif
+#ifndef le16toh
+#define le16toh(x) __bswap_16 (x)
+#endif
#ifndef le32toh
#define le32toh(x) __bswap_32 (x)
#endif
#ifndef le32toh
#define le32toh(x) __bswap_32 (x)
#endif
+#ifndef le64toh
+#define le64toh(x) __bswap_64 (x)
+#endif
#endif
#include "hivex.h"
#endif
#include "hivex.h"
@@
-132,7
+143,7
@@
struct ntreg_hbin_block {
} __attribute__((__packed__));
#define BLOCK_ID_EQ(h,offs,eqid) \
} __attribute__((__packed__));
#define BLOCK_ID_EQ(h,offs,eqid) \
- (
strncmp (((struct ntreg_hbin_block *)((h)->addr + (offs)))->id, (eqid), 2) == 0
)
+ (
STREQLEN (((struct ntreg_hbin_block *)((h)->addr + (offs)))->id, (eqid), 2)
)
static size_t
block_len (hive_h *h, size_t blkoff, int *used)
static size_t
block_len (hive_h *h, size_t blkoff, int *used)
@@
-224,7
+235,7
@@
hivex_open (const char *filename, int flags)
h->msglvl = flags & HIVEX_OPEN_MSGLVL_MASK;
const char *debug = getenv ("HIVEX_DEBUG");
h->msglvl = flags & HIVEX_OPEN_MSGLVL_MASK;
const char *debug = getenv ("HIVEX_DEBUG");
- if (debug &&
strcmp (debug, "1") == 0
)
+ if (debug &&
STREQ (debug, "1")
)
h->msglvl = 2;
if (h->msglvl >= 2)
h->msglvl = 2;
if (h->msglvl >= 2)
@@
-259,6
+270,8
@@
hivex_open (const char *filename, int flags)
}
h->bitmap = calloc (1 + h->size / 32, 1);
}
h->bitmap = calloc (1 + h->size / 32, 1);
+ if (h->bitmap == NULL)
+ goto error;
#if 0 /* Doesn't work. */
/* Header checksum. */
#if 0 /* Doesn't work. */
/* Header checksum. */
@@
-712,7
+725,7
@@
hivex_node_get_child (hive_h *h, hive_node_h node, const char *nname)
for (i = 0; children[i] != 0; ++i) {
name = hivex_node_name (h, children[i]);
if (!name) goto error;
for (i = 0; children[i] != 0; ++i) {
name = hivex_node_name (h, children[i]);
if (!name) goto error;
- if (
strcasecmp (name, nname) == 0
) {
+ if (
STRCASEEQ (name, nname)
) {
ret = children[i];
break;
}
ret = children[i];
break;
}
@@
-843,7
+856,7
@@
hivex_node_get_value (hive_h *h, hive_node_h node, const char *key)
for (i = 0; values[i] != 0; ++i) {
name = hivex_value_key (h, values[i]);
if (!name) goto error;
for (i = 0; values[i] != 0; ++i) {
name = hivex_value_key (h, values[i]);
if (!name) goto error;
- if (
strcasecmp (name, key) == 0
) {
+ if (
STRCASEEQ (name, key)
) {
ret = values[i];
break;
}
ret = values[i];
break;
}
@@
-1019,9
+1032,12
@@
windows_utf16_to_utf8 (/* const */ char *input, size_t len)
size_t r = iconv (ic, &inp, &inlen, &outp, &outlen);
if (r == (size_t) -1) {
if (errno == E2BIG) {
size_t r = iconv (ic, &inp, &inlen, &outp, &outlen);
if (r == (size_t) -1) {
if (errno == E2BIG) {
+ size_t prev = outalloc;
/* Try again with a larger output buffer. */
free (out);
outalloc *= 2;
/* Try again with a larger output buffer. */
free (out);
outalloc *= 2;
+ if (outalloc < prev)
+ return NULL;
goto again;
}
else {
goto again;
}
else {