]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r258316:
authortijl <tijl@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 23 Nov 2013 12:17:05 +0000 (12:17 +0000)
committertijl <tijl@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 23 Nov 2013 12:17:05 +0000 (12:17 +0000)
commitac229a78780089c04810f2b1b6bb43899a985996
treefd304d03643007a655e852703f7f68afea353c52
parentfc8a35df535a2111d30b85cc8367275cd4326405
MFC r258316:

Bug fixes in iconv(3) UTF-7 support.

- Add ' to the list of directly encoded characters and * to the list of
  optionally directly encoded characters as per RFC 2152.

- In _citrus_UTF7_mbtoutf16 on end of input when the next output character
  has only been partially decoded, save a copy of the buffer of input
  characters (not just its length).  On the next call with more input
  characters this buffer is reprocessed together with the new input to
  form a fully decoded output character.

- At the end of a base64 encoded sequence fully discard '-' (BASE64_OUT)
  by decrementing psenc->chlen and i.  This is needed to make room in
  psenc->ch (input buffer) in case the next input character starts a new
  base64 encoded sequence.  And also, if this is the end of input and no
  output character can be returned, this brings the encoder in the initial
  state as indicated by _citrus_UTF7_stdenc_get_state_desc_generic which
  is used by the caller to distinguish between no output and partial
  output.

- In _citrus_UTF7_mbrtowc_priv pass the s parameter (input pointer)
  directly to _citrus_UTF7_mbtoutf16 instead of a copy (s0).  This way s
  is updated correctly in case of errors.

- In _citrus_UTF7_mbrtowc_priv when called with psenc->surrogate set
  (previous call did not have enough input), retrieve the previously
  decoded UTF-16 character from (psenc->cache >> psenc->bits) instead of
  (psenc->cache >> 2).

Approved by: re (kib)

git-svn-id: svn://svn.freebsd.org/base/stable/10@258496 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
lib/libiconv_modules/UTF7/citrus_utf7.c