… | |
… | |
1171 | if (dec.cur != dec.end && !dec.err) |
1171 | if (dec.cur != dec.end && !dec.err) |
1172 | dec.err = "garbage after CBOR object"; |
1172 | dec.err = "garbage after CBOR object"; |
1173 | |
1173 | |
1174 | if (dec.err) |
1174 | if (dec.err) |
1175 | { |
1175 | { |
|
|
1176 | if (dec.shareable) |
|
|
1177 | { |
|
|
1178 | // need to break cyclic links, which whould all be in shareable |
|
|
1179 | int i; |
|
|
1180 | SV **svp; |
|
|
1181 | |
|
|
1182 | for (i = av_len (dec.shareable) + 1; i--; ) |
|
|
1183 | if ((svp = av_fetch (dec.shareable, i, 0))) |
|
|
1184 | sv_setsv (*svp, &PL_sv_undef); |
|
|
1185 | } |
|
|
1186 | |
1176 | SvREFCNT_dec (sv); |
1187 | SvREFCNT_dec (sv); |
1177 | croak ("%s, at offset %d (octet 0x%02x)", dec.err, dec.cur - (U8 *)data, (int)(uint8_t)*dec.cur); |
1188 | croak ("%s, at offset %d (octet 0x%02x)", dec.err, dec.cur - (U8 *)data, (int)(uint8_t)*dec.cur); |
1178 | } |
1189 | } |
1179 | |
1190 | |
1180 | sv = sv_2mortal (sv); |
1191 | sv = sv_2mortal (sv); |