ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CBOR-XS/XS.xs
(Generate patch)

Comparing CBOR-XS/XS.xs (file contents):
Revision 1.59 by root, Fri Nov 25 23:37:27 2016 UTC vs.
Revision 1.60 by root, Sat Nov 26 00:47:02 2016 UTC

99 99
100#define F_SHRINK 0x00000001UL 100#define F_SHRINK 0x00000001UL
101#define F_ALLOW_UNKNOWN 0x00000002UL 101#define F_ALLOW_UNKNOWN 0x00000002UL
102#define F_ALLOW_SHARING 0x00000004UL 102#define F_ALLOW_SHARING 0x00000004UL
103#define F_ALLOW_CYCLES 0x00000008UL 103#define F_ALLOW_CYCLES 0x00000008UL
104#define F_FORBID_OBJECTS 0x00000010UL
104#define F_PACK_STRINGS 0x00000010UL 105#define F_PACK_STRINGS 0x00000020UL
105#define F_TEXT_KEYS 0x00000020UL 106#define F_TEXT_KEYS 0x00000040UL
106#define F_TEXT_STRINGS 0x00000040UL 107#define F_TEXT_STRINGS 0x00000080UL
107#define F_VALIDATE_UTF8 0x00000080UL 108#define F_VALIDATE_UTF8 0x00000100UL
108 109
109#define INIT_SIZE 32 // initial scalar size to be allocated 110#define INIT_SIZE 32 // initial scalar size to be allocated
110 111
111#define SB do { 112#define SB do {
112#define SE } while (0) 113#define SE } while (0)
477 if (ecb_expect_false (SvOBJECT (sv))) 478 if (ecb_expect_false (SvOBJECT (sv)))
478 { 479 {
479 HV *stash = SvSTASH (sv); 480 HV *stash = SvSTASH (sv);
480 GV *method; 481 GV *method;
481 482
483 if (enc->cbor.flags & F_FORBID_OBJECTS)
484 croak ("encountered object '%s', but forbid_objects is enabled",
485 SvPV_nolen (sv_2mortal (newRV_inc (sv))));
482 if ((method = gv_fetchmethod_autoload (stash, "TO_CBOR", 0))) 486 else if ((method = gv_fetchmethod_autoload (stash, "TO_CBOR", 0)))
483 { 487 {
484 dSP; 488 dSP;
485 489
486 ENTER; SAVETMPS; 490 ENTER; SAVETMPS;
487 PUSHMARK (SP); 491 PUSHMARK (SP);
1081 } 1085 }
1082 break; 1086 break;
1083 1087
1084 case CBOR_TAG_PERL_OBJECT: 1088 case CBOR_TAG_PERL_OBJECT:
1085 { 1089 {
1090 if (dec->cbor.flags & F_FORBID_OBJECTS)
1091 goto filter;
1092
1086 sv = decode_sv (dec); 1093 sv = decode_sv (dec);
1087 1094
1088 if (!SvROK (sv) || SvTYPE (SvRV (sv)) != SVt_PVAV) 1095 if (!SvROK (sv) || SvTYPE (SvRV (sv)) != SVt_PVAV)
1089 ERR ("corrupted CBOR data (non-array perl object)"); 1096 ERR ("corrupted CBOR data (non-array perl object)");
1090 1097
1132 FREETMPS; LEAVE; 1139 FREETMPS; LEAVE;
1133 } 1140 }
1134 break; 1141 break;
1135 1142
1136 default: 1143 default:
1144 filter:
1137 { 1145 {
1138 SV *tag_sv = newSVuv (tag); 1146 SV *tag_sv = newSVuv (tag);
1139 1147
1140 sv = decode_sv (dec); 1148 sv = decode_sv (dec);
1141 1149
1502 ALIAS: 1510 ALIAS:
1503 shrink = F_SHRINK 1511 shrink = F_SHRINK
1504 allow_unknown = F_ALLOW_UNKNOWN 1512 allow_unknown = F_ALLOW_UNKNOWN
1505 allow_sharing = F_ALLOW_SHARING 1513 allow_sharing = F_ALLOW_SHARING
1506 allow_cycles = F_ALLOW_CYCLES 1514 allow_cycles = F_ALLOW_CYCLES
1515 forbid_objects = F_FORBID_OBJECTS
1507 pack_strings = F_PACK_STRINGS 1516 pack_strings = F_PACK_STRINGS
1508 text_keys = F_TEXT_KEYS 1517 text_keys = F_TEXT_KEYS
1509 text_strings = F_TEXT_STRINGS 1518 text_strings = F_TEXT_STRINGS
1510 validate_utf8 = F_VALIDATE_UTF8 1519 validate_utf8 = F_VALIDATE_UTF8
1511 PPCODE: 1520 PPCODE:
1522 ALIAS: 1531 ALIAS:
1523 get_shrink = F_SHRINK 1532 get_shrink = F_SHRINK
1524 get_allow_unknown = F_ALLOW_UNKNOWN 1533 get_allow_unknown = F_ALLOW_UNKNOWN
1525 get_allow_sharing = F_ALLOW_SHARING 1534 get_allow_sharing = F_ALLOW_SHARING
1526 get_allow_cycles = F_ALLOW_CYCLES 1535 get_allow_cycles = F_ALLOW_CYCLES
1536 get_forbid_objects = F_FORBID_OBJECTS
1527 get_pack_strings = F_PACK_STRINGS 1537 get_pack_strings = F_PACK_STRINGS
1528 get_text_keys = F_TEXT_KEYS 1538 get_text_keys = F_TEXT_KEYS
1529 get_text_strings = F_TEXT_STRINGS 1539 get_text_strings = F_TEXT_STRINGS
1530 get_validate_utf8 = F_VALIDATE_UTF8 1540 get_validate_utf8 = F_VALIDATE_UTF8
1531 PPCODE: 1541 PPCODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines