summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/charcnv.c9
-rw-r--r--source3/lib/util_str.c1
2 files changed, 6 insertions, 4 deletions
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index 38bb239a12..28ecf761d3 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -839,7 +839,7 @@ size_t push_ascii_nstring(void *dest, const char *src)
}
dest_len = 0;
- for (i = 0; i < buffer_len; i++) {
+ for (i = 0; buffer[i] != 0 && (i < buffer_len); i++) {
unsigned char mb[10];
/* Convert one smb_ucs2_t character at a time. */
size_t mb_len = convert_string(CH_UCS2, CH_DOS, buffer+i, sizeof(smb_ucs2_t), mb, sizeof(mb), False);
@@ -847,6 +847,7 @@ size_t push_ascii_nstring(void *dest, const char *src)
memcpy((char *)dest + dest_len, mb, mb_len);
dest_len += mb_len;
} else {
+ errno = E2BIG;
break;
}
}
@@ -912,9 +913,11 @@ size_t pull_ascii_fstring(char *dest, const void *src)
return pull_ascii(dest, src, sizeof(fstring), -1, STR_TERMINATE);
}
-size_t pull_ascii_nstring(char *dest, const void *src)
+/* When pulling an nstring it can expand into a larger size (dos cp -> utf8). Cope with this. */
+
+size_t pull_ascii_nstring(char *dest, size_t dest_len, const void *src)
{
- return pull_ascii(dest, src, sizeof(nstring), sizeof(nstring), STR_TERMINATE);
+ return pull_ascii(dest, src, dest_len, sizeof(nstring), STR_TERMINATE);
}
/**
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index b8cf052862..2be8b7eb64 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -1307,7 +1307,6 @@ char *strstr_m(const char *src, const char *findstr)
char *retp;
size_t findstr_len = 0;
- size_t find_w_len;
/* for correctness */
if (!findstr[0]) {