… | |
… | |
162 | usize = (usize << 6) | (*src++ & 0x3f); |
162 | usize = (usize << 6) | (*src++ & 0x3f); |
163 | usize = (usize << 6) | (*src++ & 0x3f); |
163 | usize = (usize << 6) | (*src++ & 0x3f); |
164 | usize = (usize << 6) | (*src++ & 0x3f); |
164 | usize = (usize << 6) | (*src++ & 0x3f); |
165 | } |
165 | } |
166 | else |
166 | else |
167 | croak ("compressed data corrupted"); |
167 | croak ("compressed data corrupted (invalid length)"); |
168 | |
168 | |
169 | ret = NEWSV (0, usize); |
169 | ret = NEWSV (0, usize); |
170 | SvPOK_only (ret); |
170 | SvPOK_only (ret); |
171 | dst = SvPVX (ret); |
171 | dst = SvPVX (ret); |
172 | |
172 | |
173 | if (lzf_decompress (src, csize, dst, usize) != usize) |
173 | if (lzf_decompress (src, csize, dst, usize) != usize) |
174 | croak ("compressed data corrupted", csize, skip, usize); |
174 | croak ("compressed data corrupted (size mismatch)", csize, skip, usize); |
175 | } |
175 | } |
176 | else |
176 | else |
177 | { |
177 | { |
178 | usize = csize - 1; |
178 | usize = csize - 1; |
179 | ret = NEWSV (0, usize); |
179 | ret = NEWSV (0, usize); |
… | |
… | |
266 | if (ix) /* compress */ |
266 | if (ix) /* compress */ |
267 | sv = sv_2mortal (compress_sv (sv, deref ? MAGIC_CR_deref : MAGIC_CR, -1)); |
267 | sv = sv_2mortal (compress_sv (sv, deref ? MAGIC_CR_deref : MAGIC_CR, -1)); |
268 | |
268 | |
269 | XPUSHs (sv); |
269 | XPUSHs (sv); |
270 | } |
270 | } |
271 | else if (SvTYPE (sv) == SVt_PV && IN_RANGE (SvPVX (sv)[0], MAGIC_LO, MAGIC_HI)) |
271 | else if (SvPOKp (sv) && IN_RANGE (SvPVX (sv)[0], MAGIC_LO, MAGIC_HI)) |
272 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ |
272 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ |
273 | else if (ix == 2) /* compress always */ |
273 | else if (ix == 2) /* compress always */ |
274 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
274 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
275 | else /* don't compress */ |
275 | else /* don't compress */ |
276 | XPUSHs (sv_2mortal (SvREFCNT_inc (sv))); |
276 | XPUSHs (sv_2mortal (SvREFCNT_inc (sv))); |