mirror of
https://github.com/samba-team/samba.git
synced 2025-07-21 12:59:09 +03:00
s3-charcnv: fixed converted_size return in fast paths
This commit is contained in:
@ -187,17 +187,21 @@ size_t convert_string_error(charset_t from, charset_t to,
|
|||||||
#else
|
#else
|
||||||
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
||||||
if (converted_size) {
|
if (converted_size) {
|
||||||
*converted_size += retval;
|
*converted_size = ret + retval;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (converted_size) {
|
||||||
|
*converted_size = retval;
|
||||||
|
}
|
||||||
if (!dlen) {
|
if (!dlen) {
|
||||||
/* Even if we fast path we should note if we ran out of room. */
|
/* Even if we fast path we should note if we ran out of room. */
|
||||||
if (((slen != (size_t)-1) && slen) ||
|
if (((slen != (size_t)-1) && slen) ||
|
||||||
((slen == (size_t)-1) && lastp)) {
|
((slen == (size_t)-1) && lastp)) {
|
||||||
errno = E2BIG;
|
errno = E2BIG;
|
||||||
|
return (size_t)-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
@ -227,17 +231,21 @@ size_t convert_string_error(charset_t from, charset_t to,
|
|||||||
#else
|
#else
|
||||||
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
||||||
if (converted_size) {
|
if (converted_size) {
|
||||||
*converted_size += retval;
|
*converted_size = ret + retval;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (converted_size) {
|
||||||
|
*converted_size = retval;
|
||||||
|
}
|
||||||
if (!dlen) {
|
if (!dlen) {
|
||||||
/* Even if we fast path we should note if we ran out of room. */
|
/* Even if we fast path we should note if we ran out of room. */
|
||||||
if (((slen != (size_t)-1) && slen) ||
|
if (((slen != (size_t)-1) && slen) ||
|
||||||
((slen == (size_t)-1) && lastp)) {
|
((slen == (size_t)-1) && lastp)) {
|
||||||
errno = E2BIG;
|
errno = E2BIG;
|
||||||
|
return (size_t)-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
@ -267,24 +275,24 @@ size_t convert_string_error(charset_t from, charset_t to,
|
|||||||
#else
|
#else
|
||||||
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
size_t ret = convert_string_internal(from, to, p, slen, q, dlen, converted_size);
|
||||||
if (converted_size) {
|
if (converted_size) {
|
||||||
*converted_size += retval;
|
*converted_size = ret + retval;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (converted_size) {
|
if (converted_size) {
|
||||||
*converted_size += retval;
|
*converted_size = retval;
|
||||||
}
|
}
|
||||||
if (!dlen) {
|
if (!dlen) {
|
||||||
/* Even if we fast path we should note if we ran out of room. */
|
/* Even if we fast path we should note if we ran out of room. */
|
||||||
if (((slen != (size_t)-1) && slen) ||
|
if (((slen != (size_t)-1) && slen) ||
|
||||||
((slen == (size_t)-1) && lastp)) {
|
((slen == (size_t)-1) && lastp)) {
|
||||||
errno = E2BIG;
|
errno = E2BIG;
|
||||||
return -1;
|
return (size_t)-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BROKEN_UNICODE_COMPOSE_CHARACTERS
|
#ifdef BROKEN_UNICODE_COMPOSE_CHARACTERS
|
||||||
@ -303,7 +311,8 @@ size_t convert_string(charset_t from, charset_t to,
|
|||||||
switch(errno) {
|
switch(errno) {
|
||||||
case EINVAL:
|
case EINVAL:
|
||||||
reason="Incomplete multibyte sequence";
|
reason="Incomplete multibyte sequence";
|
||||||
DEBUG(3,("convert_string_internal: Conversion error: %s(%s)\n",reason,src));
|
DEBUG(3,("convert_string_internal: Conversion error: %s(%s)\n",
|
||||||
|
reason, (const char *)src));
|
||||||
return (size_t)-1;
|
return (size_t)-1;
|
||||||
case E2BIG:
|
case E2BIG:
|
||||||
{
|
{
|
||||||
@ -325,10 +334,12 @@ size_t convert_string(charset_t from, charset_t to,
|
|||||||
}
|
}
|
||||||
case EILSEQ:
|
case EILSEQ:
|
||||||
reason="Illegal multibyte sequence";
|
reason="Illegal multibyte sequence";
|
||||||
DEBUG(3,("convert_string_internal: Conversion error: %s(%s)\n",reason,src));
|
DEBUG(3,("convert_string_internal: Conversion error: %s(%s)\n",
|
||||||
|
reason, (const char *)src));
|
||||||
return (size_t)-1;
|
return (size_t)-1;
|
||||||
default:
|
default:
|
||||||
DEBUG(0,("convert_string_internal: Conversion error: %s(%s)\n",reason,src));
|
DEBUG(0,("convert_string_internal: Conversion error: %s(%s)\n",
|
||||||
|
reason, (const char *)src));
|
||||||
return (size_t)-1;
|
return (size_t)-1;
|
||||||
}
|
}
|
||||||
/* smb_panic(reason); */
|
/* smb_panic(reason); */
|
||||||
|
Reference in New Issue
Block a user