chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Prep v234: Apply missing upstream fixes in src/basic (1/6)
[elogind.git]
/
src
/
basic
/
hexdecoct.c
diff --git
a/src/basic/hexdecoct.c
b/src/basic/hexdecoct.c
index c5bda6c4d68db6b69f2ec8a5d996f3928045ee98..2d6e377f0a4062cbdc693d103bfb45a21a3c4b63 100644
(file)
--- a/
src/basic/hexdecoct.c
+++ b/
src/basic/hexdecoct.c
@@
-72,10
+72,10
@@
int unhexchar(char c) {
}
char *hexmem(const void *p, size_t l) {
}
char *hexmem(const void *p, size_t l) {
- char *r, *z;
const uint8_t *x;
const uint8_t *x;
+ char *r, *z;
- z = r =
malloc(
l * 2 + 1);
+ z = r =
new(char,
l * 2 + 1);
if (!r)
return NULL;
if (!r)
return NULL;
@@
-97,6
+97,9
@@
int unhexmem(const char *p, size_t l, void **mem, size_t *len) {
assert(len);
assert(p);
assert(len);
assert(p);
+ if (l % 2 != 0)
+ return -EINVAL;
+
z = r = malloc((l + 1) / 2 + 1);
if (!r)
return -ENOMEM;
z = r = malloc((l + 1) / 2 + 1);
if (!r)
return -ENOMEM;
@@
-107,12
+110,10
@@
int unhexmem(const char *p, size_t l, void **mem, size_t *len) {
a = unhexchar(x[0]);
if (a < 0)
return a;
a = unhexchar(x[0]);
if (a < 0)
return a;
- else if (x+1 < p + l) {
- b = unhexchar(x[1]);
- if (b < 0)
- return b;
- } else
- b = 0;
+
+ b = unhexchar(x[1]);
+ if (b < 0)
+ return b;
*(z++) = (uint8_t) a << 4 | (uint8_t) b;
}
*(z++) = (uint8_t) a << 4 | (uint8_t) b;
}