mirror of https://gerrit.osmocom.org/asn1c
problem fixed
This commit is contained in:
parent
af63a91eea
commit
c7549b1b6e
|
@ -111,7 +111,7 @@ BMPString_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
|
||||||
if(1) {
|
if(1) {
|
||||||
/* Swap byte order and trim encoding to 2 bytes */
|
/* Swap byte order and trim encoding to 2 bytes */
|
||||||
uint32_t *wc = wcs;
|
uint32_t *wc = wcs;
|
||||||
uint32_t *wc_end = wcs + wcs_len + 1;
|
uint32_t *wc_end = wcs + wcs_len;
|
||||||
uint16_t *dstwc = (uint16_t *)wcs;
|
uint16_t *dstwc = (uint16_t *)wcs;
|
||||||
for(; wc < wc_end; wc++, dstwc++) {
|
for(; wc < wc_end; wc++, dstwc++) {
|
||||||
uint32_t wch = *wc;
|
uint32_t wch = *wc;
|
||||||
|
@ -131,6 +131,7 @@ BMPString_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
|
||||||
rc.consumed = 0;
|
rc.consumed = 0;
|
||||||
return rc;
|
return rc;
|
||||||
} else {
|
} else {
|
||||||
|
dstwc[2 * wcs_len] = 0;
|
||||||
wcs = (uint32_t *)dstwc;
|
wcs = (uint32_t *)dstwc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
|
* Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
|
||||||
|
* All rights reserved.
|
||||||
* Redistribution and modifications are permitted subject to BSD license.
|
* Redistribution and modifications are permitted subject to BSD license.
|
||||||
*/
|
*/
|
||||||
#include <asn_internal.h>
|
#include <asn_internal.h>
|
||||||
|
@ -103,6 +104,7 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
|
||||||
size_t length;
|
size_t length;
|
||||||
uint8_t *buf = st->buf;
|
uint8_t *buf = st->buf;
|
||||||
uint8_t *end = buf + st->size;
|
uint8_t *end = buf + st->size;
|
||||||
|
uint32_t *dstend = dst + dstlen;
|
||||||
|
|
||||||
for(length = 0; buf < end; length++) {
|
for(length = 0; buf < end; length++) {
|
||||||
int ch = *buf;
|
int ch = *buf;
|
||||||
|
@ -127,7 +129,7 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
|
||||||
/* Check character sequence length */
|
/* Check character sequence length */
|
||||||
if(buf + want > end) return U8E_TRUNC;
|
if(buf + want > end) return U8E_TRUNC;
|
||||||
|
|
||||||
value = ch & (0xff >> (want + 1));
|
value = ch & (0xff >> want);
|
||||||
cend = buf + want;
|
cend = buf + want;
|
||||||
for(buf++; buf < cend; buf++) {
|
for(buf++; buf < cend; buf++) {
|
||||||
ch = *buf;
|
ch = *buf;
|
||||||
|
@ -136,10 +138,11 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
|
||||||
}
|
}
|
||||||
if(value < UTF8String_mv[want])
|
if(value < UTF8String_mv[want])
|
||||||
return U8E_NOTMIN;
|
return U8E_NOTMIN;
|
||||||
if(dstlen) *dst++ = value; /* Record value */
|
if(dst < dstend)
|
||||||
|
*dst++ = value; /* Record value */
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dstlen) *dst = 0; /* zero-terminate */
|
if(dst < dstend) *dst = 0; /* zero-terminate */
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue