summaryrefslogtreecommitdiff
path: root/source/lib/util_reg_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/lib/util_reg_api.c')
-rw-r--r--source/lib/util_reg_api.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/source/lib/util_reg_api.c b/source/lib/util_reg_api.c
index 8f28e9c282..60031d97d3 100644
--- a/source/lib/util_reg_api.c
+++ b/source/lib/util_reg_api.c
@@ -91,15 +91,16 @@ WERROR registry_pull_value(TALLOC_CTX *mem_ctx,
goto error;
}
- if (!convert_string_talloc(value, CH_UTF16LE, CH_UNIX, tmp,
- length+2, &value->v.sz.str,
- &value->v.sz.len, False)) {
- SAFE_FREE(tmp);
+ value->v.sz.len = convert_string_talloc(
+ value, CH_UTF16LE, CH_UNIX, tmp, length+2,
+ &value->v.sz.str, False);
+
+ SAFE_FREE(tmp);
+
+ if (value->v.sz.len == (size_t)-1) {
err = WERR_INVALID_PARAM;
goto error;
}
-
- SAFE_FREE(tmp);
break;
}
case REG_MULTI_SZ:
@@ -142,13 +143,11 @@ WERROR registry_push_value(TALLOC_CTX *mem_ctx,
}
case REG_SZ:
case REG_EXPAND_SZ: {
- if (!convert_string_talloc(mem_ctx, CH_UNIX, CH_UTF16LE,
- value->v.sz.str,
- MIN(value->v.sz.len,
- strlen(value->v.sz.str)+1),
- (void *)&(presult->data),
- &presult->length, False))
- {
+ presult->length = convert_string_talloc(
+ mem_ctx, CH_UNIX, CH_UTF16LE, value->v.sz.str,
+ MIN(value->v.sz.len, strlen(value->v.sz.str)+1),
+ (void *)&(presult->data), False);
+ if (presult->length == (size_t)-1) {
return WERR_NOMEM;
}
break;
@@ -177,13 +176,12 @@ WERROR registry_push_value(TALLOC_CTX *mem_ctx,
/* convert the single strings */
for (count = 0; count < value->v.multi_sz.num_strings; count++)
{
- if (!convert_string_talloc(strings, CH_UNIX,
- CH_UTF16LE, value->v.multi_sz.strings[count],
+ string_lengths[count] = convert_string_talloc(
+ strings, CH_UNIX, CH_UTF16LE,
+ value->v.multi_sz.strings[count],
strlen(value->v.multi_sz.strings[count])+1,
- (void *)&strings[count],
- &string_lengths[count], false))
- {
-
+ (void *)&strings[count], false);
+ if (string_lengths[count] == (size_t)-1) {
TALLOC_FREE(tmp_ctx);
return WERR_NOMEM;
}