diff options
author | Lev Walkin <vlm@lionet.info> | 2006-09-17 01:27:44 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2006-09-17 01:27:44 +0000 |
commit | c7549b1b6ee5dc3f8fefc85bcce301223705a6a6 (patch) | |
tree | 58c271d464342a315f6c52f8362c23fa9508312c | |
parent | af63a91eea4a9230fdedc82e3ebfdf2b375f71f4 (diff) |
problem fixed
-rw-r--r-- | skeletons/BMPString.c | 3 | ||||
-rw-r--r-- | skeletons/UTF8String.c | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c index 1bfb174f..d6a9308f 100644 --- a/skeletons/BMPString.c +++ b/skeletons/BMPString.c @@ -111,7 +111,7 @@ BMPString_decode_xer(asn_codec_ctx_t *opt_codec_ctx, if(1) { /* Swap byte order and trim encoding to 2 bytes */ 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; for(; wc < wc_end; wc++, dstwc++) { uint32_t wch = *wc; @@ -131,6 +131,7 @@ BMPString_decode_xer(asn_codec_ctx_t *opt_codec_ctx, rc.consumed = 0; return rc; } else { + dstwc[2 * wcs_len] = 0; wcs = (uint32_t *)dstwc; } } diff --git a/skeletons/UTF8String.c b/skeletons/UTF8String.c index 3cd574d5..e3f73881 100644 --- a/skeletons/UTF8String.c +++ b/skeletons/UTF8String.c @@ -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. */ #include <asn_internal.h> @@ -103,6 +104,7 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) { size_t length; uint8_t *buf = st->buf; uint8_t *end = buf + st->size; + uint32_t *dstend = dst + dstlen; for(length = 0; buf < end; length++) { int ch = *buf; @@ -127,7 +129,7 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) { /* Check character sequence length */ if(buf + want > end) return U8E_TRUNC; - value = ch & (0xff >> (want + 1)); + value = ch & (0xff >> want); cend = buf + want; for(buf++; buf < cend; buf++) { ch = *buf; @@ -136,10 +138,11 @@ UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) { } if(value < UTF8String_mv[want]) 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; } |