Skip to content
Snippets Groups Projects
Commit c7549b1b authored by Lev Walkin's avatar Lev Walkin
Browse files

problem fixed

parent af63a91e
No related branches found
No related tags found
No related merge requests found
...@@ -111,7 +111,7 @@ BMPString_decode_xer(asn_codec_ctx_t *opt_codec_ctx, ...@@ -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, ...@@ -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;
} }
} }
......
/*- /*-
* 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) { ...@@ -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) { ...@@ -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) { ...@@ -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;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment