filter.cpp 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2023, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include <sstream>
  7. using namespace ArduinoJson::detail;
  8. TEST_CASE("deserializeMsgPack() filter") {
  9. StaticJsonDocument<4096> doc;
  10. DeserializationError error;
  11. StaticJsonDocument<200> filter;
  12. DeserializationOption::Filter filterOpt(filter);
  13. SECTION("root is fixmap") {
  14. SECTION("filter = {include:true,ignore:false)") {
  15. filter["include"] = true;
  16. filter["ignore"] = false;
  17. SECTION("input truncated after ignored key") {
  18. error = deserializeMsgPack(doc, "\x82\xA6ignore", 8, filterOpt);
  19. CHECK(error == DeserializationError::IncompleteInput);
  20. CHECK(doc.as<std::string>() == "{}");
  21. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(0));
  22. }
  23. SECTION("input truncated after inside skipped uint 8") {
  24. error = deserializeMsgPack(doc, "\x82\xA6ignore\xCC\x2A\xA7include\x2A",
  25. 9, filterOpt);
  26. CHECK(error == DeserializationError::IncompleteInput);
  27. CHECK(doc.as<std::string>() == "{}");
  28. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(0));
  29. }
  30. SECTION("input truncated after before skipped string size") {
  31. error = deserializeMsgPack(doc, "\x82\xA6ignore\xd9", 9, filterOpt);
  32. CHECK(error == DeserializationError::IncompleteInput);
  33. CHECK(doc.as<std::string>() == "{}");
  34. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(0));
  35. }
  36. SECTION("input truncated after before skipped ext size") {
  37. error = deserializeMsgPack(doc, "\x82\xA6ignore\xC7", 9, filterOpt);
  38. CHECK(error == DeserializationError::IncompleteInput);
  39. CHECK(doc.as<std::string>() == "{}");
  40. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(0));
  41. }
  42. SECTION("skip nil") {
  43. error = deserializeMsgPack(doc, "\x82\xA6ignore\xC0\xA7include\x2A",
  44. filterOpt);
  45. CHECK(error == DeserializationError::Ok);
  46. CHECK(doc.as<std::string>() == "{\"include\":42}");
  47. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  48. }
  49. SECTION("reject 0xc1") {
  50. error = deserializeMsgPack(doc, "\x82\xA6ignore\xC1\xA7include\x2A",
  51. filterOpt);
  52. CHECK(error == DeserializationError::InvalidInput);
  53. }
  54. SECTION("skip false") {
  55. error = deserializeMsgPack(doc, "\x82\xA6ignore\xC2\xA7include\x2A",
  56. filterOpt);
  57. CHECK(error == DeserializationError::Ok);
  58. CHECK(doc.as<std::string>() == "{\"include\":42}");
  59. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  60. }
  61. SECTION("skip true") {
  62. error = deserializeMsgPack(doc, "\x82\xA6ignore\xC3\xA7include\x2A",
  63. filterOpt);
  64. CHECK(error == DeserializationError::Ok);
  65. CHECK(doc.as<std::string>() == "{\"include\":42}");
  66. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  67. }
  68. SECTION("skip positive fixint") {
  69. error = deserializeMsgPack(doc, "\x82\xA6ignore\x2A\xA7include\x2A",
  70. filterOpt);
  71. CHECK(error == DeserializationError::Ok);
  72. CHECK(doc.as<std::string>() == "{\"include\":42}");
  73. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  74. }
  75. SECTION("skip negative fixint") {
  76. error = deserializeMsgPack(doc, "\x82\xA6ignore\xFF\xA7include\x2A",
  77. filterOpt);
  78. CHECK(error == DeserializationError::Ok);
  79. CHECK(doc.as<std::string>() == "{\"include\":42}");
  80. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  81. }
  82. SECTION("skip uint 8") {
  83. error = deserializeMsgPack(doc, "\x82\xA6ignore\xCC\x2A\xA7include\x2A",
  84. filterOpt);
  85. CHECK(error == DeserializationError::Ok);
  86. CHECK(doc.as<std::string>() == "{\"include\":42}");
  87. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  88. }
  89. SECTION("skip int 8") {
  90. error = deserializeMsgPack(doc, "\x82\xA6ignore\xD0\x2A\xA7include\x2A",
  91. filterOpt);
  92. CHECK(error == DeserializationError::Ok);
  93. CHECK(doc.as<std::string>() == "{\"include\":42}");
  94. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  95. }
  96. SECTION("skip uint 16") {
  97. error = deserializeMsgPack(
  98. doc, "\x82\xA6ignore\xcd\x30\x39\xA7include\x2A", filterOpt);
  99. CHECK(error == DeserializationError::Ok);
  100. CHECK(doc.as<std::string>() == "{\"include\":42}");
  101. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  102. }
  103. SECTION("skip int 16") {
  104. error = deserializeMsgPack(
  105. doc, "\x82\xA6ignore\xD1\xCF\xC7\xA7include\x2A", filterOpt);
  106. CHECK(error == DeserializationError::Ok);
  107. CHECK(doc.as<std::string>() == "{\"include\":42}");
  108. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  109. }
  110. SECTION("skip uint 32") {
  111. error = deserializeMsgPack(
  112. doc, "\x82\xA6ignore\xCE\x12\x34\x56\x78\xA7include\x2A",
  113. filterOpt);
  114. CHECK(error == DeserializationError::Ok);
  115. CHECK(doc.as<std::string>() == "{\"include\":42}");
  116. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  117. }
  118. SECTION("skip int 32") {
  119. error = deserializeMsgPack(
  120. doc, "\x82\xA6ignore\xD2\xB6\x69\xFD\x2E\xA7include\x2A",
  121. filterOpt);
  122. CHECK(error == DeserializationError::Ok);
  123. CHECK(doc.as<std::string>() == "{\"include\":42}");
  124. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  125. }
  126. SECTION("skip uint 64") {
  127. error = deserializeMsgPack(
  128. doc,
  129. "\x82\xA6ignore\xCF\x12\x34\x56\x78\x9A\xBC\xDE\xF0\xA7include\x2A",
  130. filterOpt);
  131. CHECK(error == DeserializationError::Ok);
  132. CHECK(doc.as<std::string>() == "{\"include\":42}");
  133. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  134. }
  135. SECTION("skip int 64") {
  136. error = deserializeMsgPack(
  137. doc,
  138. "\x82\xA6ignore\xD3\x12\x34\x56\x78\x9A\xBC\xDE\xF0\xA7include\x2A",
  139. filterOpt);
  140. CHECK(error == DeserializationError::Ok);
  141. CHECK(doc.as<std::string>() == "{\"include\":42}");
  142. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  143. }
  144. SECTION("skip float 32") {
  145. error = deserializeMsgPack(
  146. doc, "\x82\xA6ignore\xCA\x40\x48\xF5\xC3\xA7include\x2A",
  147. filterOpt);
  148. CHECK(error == DeserializationError::Ok);
  149. CHECK(doc.as<std::string>() == "{\"include\":42}");
  150. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  151. }
  152. SECTION("skip float 64") {
  153. error = deserializeMsgPack(
  154. doc,
  155. "\x82\xA6ignore\xCB\x40\x09\x21\xCA\xC0\x83\x12\x6F\xA7include\x2A",
  156. filterOpt);
  157. CHECK(error == DeserializationError::Ok);
  158. CHECK(doc.as<std::string>() == "{\"include\":42}");
  159. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  160. }
  161. SECTION("skip fixstr") {
  162. error = deserializeMsgPack(
  163. doc, "\x82\xA6ignore\xABhello world\xA7include\x2A", filterOpt);
  164. CHECK(error == DeserializationError::Ok);
  165. CHECK(doc.as<std::string>() == "{\"include\":42}");
  166. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  167. }
  168. SECTION("skip str 8") {
  169. error = deserializeMsgPack(
  170. doc, "\x82\xA6ignore\xd9\x05hello\xA7include\x2A", filterOpt);
  171. CHECK(error == DeserializationError::Ok);
  172. CHECK(doc.as<std::string>() == "{\"include\":42}");
  173. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  174. }
  175. SECTION("skip str 16") {
  176. error = deserializeMsgPack(
  177. doc, "\x82\xA6ignore\xda\x00\x05hello\xA7include\x2A", filterOpt);
  178. CHECK(error == DeserializationError::Ok);
  179. CHECK(doc.as<std::string>() == "{\"include\":42}");
  180. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  181. }
  182. SECTION("skip str 32") {
  183. error = deserializeMsgPack(
  184. doc, "\x82\xA6ignore\xdb\x00\x00\x00\x05hello\xA7include\x2A",
  185. filterOpt);
  186. CHECK(error == DeserializationError::Ok);
  187. CHECK(doc.as<std::string>() == "{\"include\":42}");
  188. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  189. }
  190. SECTION("skip bin 8") {
  191. error = deserializeMsgPack(
  192. doc, "\x82\xA6ignore\xC4\x05hello\xA7include\x2A", filterOpt);
  193. CHECK(error == DeserializationError::Ok);
  194. CHECK(doc.as<std::string>() == "{\"include\":42}");
  195. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  196. }
  197. SECTION("skip bin 16") {
  198. error = deserializeMsgPack(
  199. doc, "\x82\xA6ignore\xC5\x00\x05hello\xA7include\x2A", filterOpt);
  200. CHECK(error == DeserializationError::Ok);
  201. CHECK(doc.as<std::string>() == "{\"include\":42}");
  202. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  203. }
  204. SECTION("skip bin 32") {
  205. error = deserializeMsgPack(
  206. doc, "\x82\xA6ignore\xC6\x00\x00\x00\x05hello\xA7include\x2A",
  207. filterOpt);
  208. CHECK(error == DeserializationError::Ok);
  209. CHECK(doc.as<std::string>() == "{\"include\":42}");
  210. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  211. }
  212. SECTION("skip fixarray") {
  213. error = deserializeMsgPack(
  214. doc, "\x82\xA6ignore\x92\x01\x02\xA7include\x2A", filterOpt);
  215. CHECK(error == DeserializationError::Ok);
  216. CHECK(doc.as<std::string>() == "{\"include\":42}");
  217. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  218. }
  219. SECTION("skip array 16") {
  220. error = deserializeMsgPack(
  221. doc, "\x82\xA6ignore\xDC\x00\x02\xA5hello\xA5world\xA7include\x2A",
  222. filterOpt);
  223. CHECK(error == DeserializationError::Ok);
  224. CHECK(doc.as<std::string>() == "{\"include\":42}");
  225. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  226. }
  227. SECTION("skip array 32") {
  228. error = deserializeMsgPack(
  229. doc,
  230. "\x82\xA6ignore"
  231. "\xDD\x00\x00\x00\x02\xCA\x00\x00\x00\x00\xCA\x40\x48\xF5\xC3"
  232. "\xA7include\x2A",
  233. filterOpt);
  234. CHECK(error == DeserializationError::Ok);
  235. CHECK(doc.as<std::string>() == "{\"include\":42}");
  236. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  237. }
  238. SECTION("skip fixmap") {
  239. error = deserializeMsgPack(
  240. doc, "\x82\xA6ignore\x82\xA3one\x01\xA3two\x02\xA7include\x2A",
  241. filterOpt);
  242. CHECK(error == DeserializationError::Ok);
  243. CHECK(doc.as<std::string>() == "{\"include\":42}");
  244. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  245. }
  246. SECTION("skip map 16") {
  247. error = deserializeMsgPack(doc,
  248. "\x82\xA6ignore"
  249. "\xDE\x00\x02\xA1H\xA5hello\xA1W\xA5world"
  250. "\xA7include\x2A",
  251. filterOpt);
  252. CHECK(error == DeserializationError::Ok);
  253. CHECK(doc.as<std::string>() == "{\"include\":42}");
  254. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  255. }
  256. SECTION("skip map 32") {
  257. error = deserializeMsgPack(doc,
  258. "\x82\xA6ignore"
  259. "\xDF\x00\x00\x00\x02"
  260. "\xA4zero\xCA\x00\x00\x00\x00"
  261. "\xA2pi\xCA\x40\x48\xF5\xC3"
  262. "\xA7include\x2A",
  263. filterOpt);
  264. CHECK(error == DeserializationError::Ok);
  265. CHECK(doc.as<std::string>() == "{\"include\":42}");
  266. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  267. }
  268. SECTION("skip fixext 1") {
  269. error = deserializeMsgPack(doc,
  270. "\x82\xA6ignore"
  271. "\xd4\x01\x02"
  272. "\xA7include\x2A",
  273. filterOpt);
  274. CHECK(error == DeserializationError::Ok);
  275. CHECK(doc.as<std::string>() == "{\"include\":42}");
  276. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  277. }
  278. SECTION("skip fixext 2") {
  279. error = deserializeMsgPack(doc,
  280. "\x82\xA6ignore"
  281. "\xd5\x01\x02\x03"
  282. "\xA7include\x2A",
  283. filterOpt);
  284. CHECK(error == DeserializationError::Ok);
  285. CHECK(doc.as<std::string>() == "{\"include\":42}");
  286. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  287. }
  288. SECTION("skip fixext 4") {
  289. error = deserializeMsgPack(doc,
  290. "\x82\xA6ignore"
  291. "\xd6\x01\x02\x03\x04\x05"
  292. "\xA7include\x2A",
  293. filterOpt);
  294. CHECK(error == DeserializationError::Ok);
  295. CHECK(doc.as<std::string>() == "{\"include\":42}");
  296. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  297. }
  298. SECTION("skip fixext 8") {
  299. error = deserializeMsgPack(doc,
  300. "\x82\xA6ignore"
  301. "\xd7\x01\x02\x03\x04\x05\x06\x07\x08\x09"
  302. "\xA7include\x2A",
  303. filterOpt);
  304. CHECK(error == DeserializationError::Ok);
  305. CHECK(doc.as<std::string>() == "{\"include\":42}");
  306. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  307. }
  308. SECTION("skip fixext 16") {
  309. error =
  310. deserializeMsgPack(doc,
  311. "\x82\xA6ignore"
  312. "\xd8\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A"
  313. "\x0B\x0C\x0D\x0E\x0F\x10\x11"
  314. "\xA7include\x2A",
  315. filterOpt);
  316. CHECK(error == DeserializationError::Ok);
  317. CHECK(doc.as<std::string>() == "{\"include\":42}");
  318. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  319. }
  320. SECTION("skip ext 8") {
  321. error = deserializeMsgPack(doc,
  322. "\x82\xA6ignore"
  323. "\xc7\x02\x00\x01\x02"
  324. "\xA7include\x2A",
  325. filterOpt);
  326. CHECK(error == DeserializationError::Ok);
  327. CHECK(doc.as<std::string>() == "{\"include\":42}");
  328. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  329. }
  330. SECTION("skip ext 16") {
  331. error = deserializeMsgPack(doc,
  332. "\x82\xA6ignore"
  333. "\xc8\x00\x02\x00\x01\x02"
  334. "\xA7include\x2A",
  335. filterOpt);
  336. CHECK(error == DeserializationError::Ok);
  337. CHECK(doc.as<std::string>() == "{\"include\":42}");
  338. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  339. }
  340. SECTION("skip ext 32") {
  341. error = deserializeMsgPack(doc,
  342. "\x82\xA6ignore"
  343. "\xc9\x00\x00\x00\x02\x00\x01\x02"
  344. "\xA7include\x2A",
  345. filterOpt);
  346. CHECK(error == DeserializationError::Ok);
  347. CHECK(doc.as<std::string>() == "{\"include\":42}");
  348. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(1) + 8);
  349. }
  350. }
  351. SECTION("Filter = {arronly:[{measure:true}],include:true}") {
  352. filter["onlyarr"][0]["measure"] = true;
  353. filter["include"] = true;
  354. CAPTURE(filter.as<std::string>());
  355. SECTION("include fixarray") {
  356. error = deserializeMsgPack(doc,
  357. "\x82\xA7onlyarr\x92"
  358. "\x82\xA8location\x01\xA7measure\x02"
  359. "\x82\xA8location\x02\xA7measure\x04"
  360. "\xA7include\x2A",
  361. filterOpt);
  362. CHECK(error == DeserializationError::Ok);
  363. CHECK(doc.as<std::string>() ==
  364. "{\"onlyarr\":[{\"measure\":2},{\"measure\":4}],\"include\":42}");
  365. CHECK(doc.memoryUsage() ==
  366. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(2) + 24);
  367. }
  368. SECTION("include array 16") {
  369. error = deserializeMsgPack(doc,
  370. "\x82\xA7onlyarr"
  371. "\xDC\x00\x02"
  372. "\x82\xA8location\x01\xA7measure\x02"
  373. "\x82\xA8location\x02\xA7measure\x04"
  374. "\xA7include\x2A",
  375. filterOpt);
  376. CHECK(error == DeserializationError::Ok);
  377. CHECK(doc.as<std::string>() ==
  378. "{\"onlyarr\":[{\"measure\":2},{\"measure\":4}],\"include\":42}");
  379. CHECK(doc.memoryUsage() ==
  380. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(2) + 24);
  381. }
  382. SECTION("include array 32") {
  383. error = deserializeMsgPack(doc,
  384. "\x82\xA7onlyarr"
  385. "\xDD\x00\x00\x00\x02"
  386. "\x82\xA8location\x01\xA7measure\x02"
  387. "\x82\xA8location\x02\xA7measure\x04"
  388. "\xA7include\x2A",
  389. filterOpt);
  390. CHECK(error == DeserializationError::Ok);
  391. CHECK(doc.as<std::string>() ==
  392. "{\"onlyarr\":[{\"measure\":2},{\"measure\":4}],\"include\":42}");
  393. CHECK(doc.memoryUsage() ==
  394. JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(2) + 24);
  395. }
  396. SECTION("skip null") {
  397. error = deserializeMsgPack(doc, "\x82\xA7onlyarr\xC0\xA7include\x2A",
  398. filterOpt);
  399. CHECK(error == DeserializationError::Ok);
  400. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  401. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  402. }
  403. SECTION("skip false") {
  404. error = deserializeMsgPack(doc, "\x82\xA7onlyarr\xC2\xA7include\x2A",
  405. filterOpt);
  406. CHECK(error == DeserializationError::Ok);
  407. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  408. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  409. }
  410. SECTION("skip true") {
  411. error = deserializeMsgPack(doc, "\x82\xA7onlyarr\xC3\xA7include\x2A",
  412. filterOpt);
  413. CHECK(error == DeserializationError::Ok);
  414. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  415. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  416. }
  417. SECTION("skip positive fixint") {
  418. error = deserializeMsgPack(doc, "\x82\xA7onlyarr\x2A\xA7include\x2A",
  419. filterOpt);
  420. CHECK(error == DeserializationError::Ok);
  421. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  422. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  423. }
  424. SECTION("skip negative fixint") {
  425. error = deserializeMsgPack(doc, "\x82\xA7onlyarr\xFF\xA7include\x2A",
  426. filterOpt);
  427. CHECK(error == DeserializationError::Ok);
  428. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  429. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  430. }
  431. SECTION("skip uint 8") {
  432. error = deserializeMsgPack(
  433. doc, "\x82\xA7onlyarr\xCC\x2A\xA7include\x2A", filterOpt);
  434. CHECK(error == DeserializationError::Ok);
  435. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  436. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  437. }
  438. SECTION("skip uint 16") {
  439. error = deserializeMsgPack(
  440. doc, "\x82\xA7onlyarr\xcd\x30\x39\xA7include\x2A", filterOpt);
  441. CHECK(error == DeserializationError::Ok);
  442. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  443. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  444. }
  445. SECTION("skip uint 32") {
  446. error = deserializeMsgPack(
  447. doc, "\x82\xA7onlyarr\xCE\x12\x34\x56\x78\xA7include\x2A",
  448. filterOpt);
  449. CHECK(error == DeserializationError::Ok);
  450. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  451. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  452. }
  453. SECTION("skip uint 64") {
  454. error = deserializeMsgPack(doc,
  455. "\x82\xA7onlyarr\xCF\x12\x34\x56\x78\x9A\xBC"
  456. "\xDE\xF0\xA7include\x2A",
  457. filterOpt);
  458. CHECK(error == DeserializationError::Ok);
  459. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  460. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  461. }
  462. SECTION("skip int 8") {
  463. error = deserializeMsgPack(
  464. doc, "\x82\xA7onlyarr\xD0\x2A\xA7include\x2A", filterOpt);
  465. CHECK(error == DeserializationError::Ok);
  466. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  467. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  468. }
  469. SECTION("skip int 16") {
  470. error = deserializeMsgPack(
  471. doc, "\x82\xA7onlyarr\xD1\xCF\xC7\xA7include\x2A", filterOpt);
  472. CHECK(error == DeserializationError::Ok);
  473. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  474. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  475. }
  476. SECTION("skip int 32") {
  477. error = deserializeMsgPack(
  478. doc, "\x82\xA7onlyarr\xD2\xB6\x69\xFD\x2E\xA7include\x2A",
  479. filterOpt);
  480. CHECK(error == DeserializationError::Ok);
  481. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  482. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  483. }
  484. SECTION("skip int 64") {
  485. error = deserializeMsgPack(doc,
  486. "\x82\xA7onlyarr\xD3\x12\x34\x56\x78\x9A\xBC"
  487. "\xDE\xF0\xA7include\x2A",
  488. filterOpt);
  489. CHECK(error == DeserializationError::Ok);
  490. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  491. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  492. }
  493. SECTION("skip float 32") {
  494. error = deserializeMsgPack(
  495. doc, "\x82\xA7onlyarr\xCA\x40\x48\xF5\xC3\xA7include\x2A",
  496. filterOpt);
  497. CHECK(error == DeserializationError::Ok);
  498. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  499. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  500. }
  501. SECTION("skip float 64") {
  502. error = deserializeMsgPack(doc,
  503. "\x82\xA7onlyarr\xCB\x40\x09\x21\xCA\xC0\x83"
  504. "\x12\x6F\xA7include\x2A",
  505. filterOpt);
  506. CHECK(error == DeserializationError::Ok);
  507. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  508. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  509. }
  510. SECTION("skip fixstr") {
  511. error = deserializeMsgPack(
  512. doc, "\x82\xA7onlyarr\xABhello world\xA7include\x2A", filterOpt);
  513. CHECK(error == DeserializationError::Ok);
  514. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  515. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  516. }
  517. SECTION("skip str 8") {
  518. error = deserializeMsgPack(
  519. doc, "\x82\xA7onlyarr\xd9\x05hello\xA7include\x2A", filterOpt);
  520. CHECK(error == DeserializationError::Ok);
  521. }
  522. SECTION("skip str 16") {
  523. error = deserializeMsgPack(
  524. doc, "\x82\xA7onlyarr\xda\x00\x05hello\xA7include\x2A", filterOpt);
  525. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  526. }
  527. SECTION("skip str 32") {
  528. error = deserializeMsgPack(
  529. doc, "\x82\xA7onlyarr\xdb\x00\x00\x00\x05hello\xA7include\x2A",
  530. filterOpt);
  531. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  532. }
  533. SECTION("skip fixmap") {
  534. error = deserializeMsgPack(
  535. doc, "\x82\xA7onlyarr\x82\xA3one\x01\xA3two\x02\xA7include\x2A",
  536. filterOpt);
  537. CHECK(error == DeserializationError::Ok);
  538. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  539. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  540. }
  541. SECTION("skip map 16") {
  542. error = deserializeMsgPack(doc,
  543. "\x82\xA7onlyarr"
  544. "\xDE\x00\x02\xA1H\xA5hello\xA1W\xA5world"
  545. "\xA7include\x2A",
  546. filterOpt);
  547. CHECK(error == DeserializationError::Ok);
  548. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  549. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  550. }
  551. SECTION("skip map 32") {
  552. error = deserializeMsgPack(doc,
  553. "\x82\xA7onlyarr"
  554. "\xDF\x00\x00\x00\x02"
  555. "\xA4zero\xCA\x00\x00\x00\x00"
  556. "\xA2pi\xCA\x40\x48\xF5\xC3"
  557. "\xA7include\x2A",
  558. filterOpt);
  559. CHECK(error == DeserializationError::Ok);
  560. CHECK(doc.as<std::string>() == "{\"onlyarr\":null,\"include\":42}");
  561. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  562. }
  563. }
  564. }
  565. SECTION("root is fixarray") {
  566. SECTION("filter = [false, true]") {
  567. filter[0] = false; // only the first elment of the filter matters
  568. filter[1] = true; // so this one is ignored
  569. SECTION("input = [1,2,3]") {
  570. error = deserializeMsgPack(doc, "\x93\x01\x02\x03", filterOpt);
  571. CHECK(error == DeserializationError::Ok);
  572. CHECK(doc.as<std::string>() == "[]");
  573. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(0));
  574. }
  575. }
  576. SECTION("filter = [true, false]") {
  577. filter[0] = true; // only the first elment of the filter matters
  578. filter[1] = false; // so this one is ignored
  579. SECTION("input = [1,2,3]") {
  580. error = deserializeMsgPack(doc, "\x93\x01\x02\x03", filterOpt);
  581. CHECK(error == DeserializationError::Ok);
  582. CHECK(doc.as<std::string>() == "[1,2,3]");
  583. CHECK(doc.memoryUsage() == JSON_ARRAY_SIZE(3));
  584. }
  585. }
  586. }
  587. SECTION("Filter = {onlyobj:{measure:true},include:true}") {
  588. filter["onlyobj"]["measure"] = true;
  589. filter["include"] = true;
  590. CAPTURE(filter.as<std::string>());
  591. SECTION("include fixmap") {
  592. error = deserializeMsgPack(doc,
  593. "\x82\xA7onlyobj"
  594. "\x82\xA8location\x01\xA7measure\x02"
  595. "\xA7include\x2A",
  596. filterOpt);
  597. CHECK(error == DeserializationError::Ok);
  598. CHECK(doc.as<std::string>() ==
  599. "{\"onlyobj\":{\"measure\":2},\"include\":42}");
  600. CHECK(doc.memoryUsage() ==
  601. JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1) + 24);
  602. }
  603. SECTION("include map 16") {
  604. error = deserializeMsgPack(doc,
  605. "\x82\xA7onlyobj"
  606. "\xDE\x00\x02\xA8location\x01\xA7measure\x02"
  607. "\xA7include\x2A",
  608. filterOpt);
  609. CHECK(error == DeserializationError::Ok);
  610. CHECK(doc.as<std::string>() ==
  611. "{\"onlyobj\":{\"measure\":2},\"include\":42}");
  612. CHECK(doc.memoryUsage() ==
  613. JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1) + 24);
  614. }
  615. SECTION("include map 32") {
  616. error = deserializeMsgPack(doc,
  617. "\x82\xA7onlyobj"
  618. "\xDF\x00\x00\x00\x02"
  619. "\xA8location\x01\xA7measure\x02"
  620. "\xA7include\x2A",
  621. filterOpt);
  622. CHECK(error == DeserializationError::Ok);
  623. CHECK(doc.as<std::string>() ==
  624. "{\"onlyobj\":{\"measure\":2},\"include\":42}");
  625. CHECK(doc.memoryUsage() ==
  626. JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1) + 24);
  627. }
  628. SECTION("skip null") {
  629. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xC0\xA7include\x2A",
  630. filterOpt);
  631. CHECK(error == DeserializationError::Ok);
  632. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  633. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  634. }
  635. SECTION("skip false") {
  636. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xC2\xA7include\x2A",
  637. filterOpt);
  638. CHECK(error == DeserializationError::Ok);
  639. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  640. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  641. }
  642. SECTION("skip true") {
  643. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xC3\xA7include\x2A",
  644. filterOpt);
  645. CHECK(error == DeserializationError::Ok);
  646. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  647. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  648. }
  649. SECTION("skip positive fixint") {
  650. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\x2A\xA7include\x2A",
  651. filterOpt);
  652. CHECK(error == DeserializationError::Ok);
  653. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  654. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  655. }
  656. SECTION("skip negative fixint") {
  657. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xFF\xA7include\x2A",
  658. filterOpt);
  659. CHECK(error == DeserializationError::Ok);
  660. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  661. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  662. }
  663. SECTION("skip uint 8") {
  664. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xCC\x2A\xA7include\x2A",
  665. filterOpt);
  666. CHECK(error == DeserializationError::Ok);
  667. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  668. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  669. }
  670. SECTION("skip uint 16") {
  671. error = deserializeMsgPack(
  672. doc, "\x82\xA7onlyobj\xcd\x30\x39\xA7include\x2A", filterOpt);
  673. CHECK(error == DeserializationError::Ok);
  674. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  675. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  676. }
  677. SECTION("skip uint 32") {
  678. error = deserializeMsgPack(
  679. doc, "\x82\xA7onlyobj\xCE\x12\x34\x56\x78\xA7include\x2A", filterOpt);
  680. CHECK(error == DeserializationError::Ok);
  681. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  682. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  683. }
  684. SECTION("skip uint 64") {
  685. error = deserializeMsgPack(doc,
  686. "\x82\xA7onlyobj\xCF\x12\x34\x56\x78\x9A\xBC"
  687. "\xDE\xF0\xA7include\x2A",
  688. filterOpt);
  689. CHECK(error == DeserializationError::Ok);
  690. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  691. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  692. }
  693. SECTION("skip int 8") {
  694. error = deserializeMsgPack(doc, "\x82\xA7onlyobj\xD0\x2A\xA7include\x2A",
  695. filterOpt);
  696. CHECK(error == DeserializationError::Ok);
  697. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  698. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  699. }
  700. SECTION("skip int 16") {
  701. error = deserializeMsgPack(
  702. doc, "\x82\xA7onlyobj\xD1\xCF\xC7\xA7include\x2A", filterOpt);
  703. CHECK(error == DeserializationError::Ok);
  704. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  705. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  706. }
  707. SECTION("skip int 32") {
  708. error = deserializeMsgPack(
  709. doc, "\x82\xA7onlyobj\xD2\xB6\x69\xFD\x2E\xA7include\x2A", filterOpt);
  710. CHECK(error == DeserializationError::Ok);
  711. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  712. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  713. }
  714. SECTION("skip int 64") {
  715. error = deserializeMsgPack(doc,
  716. "\x82\xA7onlyobj\xD3\x12\x34\x56\x78\x9A\xBC"
  717. "\xDE\xF0\xA7include\x2A",
  718. filterOpt);
  719. CHECK(error == DeserializationError::Ok);
  720. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  721. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  722. }
  723. SECTION("skip float 32") {
  724. error = deserializeMsgPack(
  725. doc, "\x82\xA7onlyobj\xCA\x40\x48\xF5\xC3\xA7include\x2A", filterOpt);
  726. CHECK(error == DeserializationError::Ok);
  727. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  728. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  729. }
  730. SECTION("skip float 64") {
  731. error = deserializeMsgPack(doc,
  732. "\x82\xA7onlyobj\xCB\x40\x09\x21\xCA\xC0\x83"
  733. "\x12\x6F\xA7include\x2A",
  734. filterOpt);
  735. CHECK(error == DeserializationError::Ok);
  736. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  737. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  738. }
  739. SECTION("skip fixstr") {
  740. error = deserializeMsgPack(
  741. doc, "\x82\xA7onlyobj\xABhello world\xA7include\x2A", filterOpt);
  742. CHECK(error == DeserializationError::Ok);
  743. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  744. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  745. }
  746. SECTION("skip str 8") {
  747. error = deserializeMsgPack(
  748. doc, "\x82\xA7onlyobj\xd9\x05hello\xA7include\x2A", filterOpt);
  749. CHECK(error == DeserializationError::Ok);
  750. }
  751. SECTION("skip str 16") {
  752. error = deserializeMsgPack(
  753. doc, "\x82\xA7onlyobj\xda\x00\x05hello\xA7include\x2A", filterOpt);
  754. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  755. }
  756. SECTION("skip str 32") {
  757. error = deserializeMsgPack(
  758. doc, "\x82\xA7onlyobj\xdb\x00\x00\x00\x05hello\xA7include\x2A",
  759. filterOpt);
  760. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  761. }
  762. SECTION("skip fixarray") {
  763. error = deserializeMsgPack(
  764. doc, "\x82\xA7onlyobj\x92\x01\x02\xA7include\x2A", filterOpt);
  765. CHECK(error == DeserializationError::Ok);
  766. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  767. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  768. }
  769. SECTION("skip array 16") {
  770. error = deserializeMsgPack(doc,
  771. "\x82\xA7onlyobj\xDC\x00\x01\xA7"
  772. "example\xA7include\x2A",
  773. filterOpt);
  774. CHECK(error == DeserializationError::Ok);
  775. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  776. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  777. }
  778. SECTION("skip array 32") {
  779. error = deserializeMsgPack(doc,
  780. "\x82\xA7onlyobj"
  781. "\xDD\x00\x00\x00\x02\x01\x02"
  782. "\xA7include\x2A",
  783. filterOpt);
  784. CHECK(error == DeserializationError::Ok);
  785. CHECK(doc.as<std::string>() == "{\"onlyobj\":null,\"include\":42}");
  786. CHECK(doc.memoryUsage() == JSON_OBJECT_SIZE(2) + 16);
  787. }
  788. }
  789. SECTION("filter = true") {
  790. filter.set(true);
  791. error = deserializeMsgPack(doc, "\x90", filterOpt);
  792. CHECK(error == DeserializationError::Ok);
  793. CHECK(doc.is<JsonArray>() == true);
  794. CHECK(doc.size() == 0);
  795. }
  796. SECTION("filter = false") {
  797. filter.set(false);
  798. SECTION("input = fixarray") {
  799. error = deserializeMsgPack(doc, "\x92\x01\x02", filterOpt);
  800. CHECK(error == DeserializationError::Ok);
  801. CHECK(doc.isNull() == true);
  802. }
  803. SECTION("input = array 16") {
  804. error = deserializeMsgPack(doc, "\xDC\x00\x02\x01\x02", filterOpt);
  805. CHECK(error == DeserializationError::Ok);
  806. CHECK(doc.isNull() == true);
  807. }
  808. SECTION("array too deep") {
  809. error = deserializeMsgPack(doc, "\x91\x91\x91\x91\x91", 5, filterOpt,
  810. DeserializationOption::NestingLimit(4));
  811. CHECK(error == DeserializationError::TooDeep);
  812. }
  813. SECTION("object too deep") {
  814. error = deserializeMsgPack(
  815. doc, "\x81\xA1z\x81\xA1z\x81\xA1z\x81\xA1z\x81\xA1z", 15, filterOpt,
  816. DeserializationOption::NestingLimit(4));
  817. CHECK(error == DeserializationError::TooDeep);
  818. }
  819. }
  820. }
  821. TEST_CASE("Zero-copy mode") { // issue #1697
  822. char input[] = "\x82\xA7include\x01\xA6ignore\x02";
  823. StaticJsonDocument<256> filter;
  824. filter["include"] = true;
  825. StaticJsonDocument<256> doc;
  826. DeserializationError err =
  827. deserializeMsgPack(doc, input, 18, DeserializationOption::Filter(filter));
  828. CHECK(err == DeserializationError::Ok);
  829. CHECK(doc.as<std::string>() == "{\"include\":1}");
  830. }
  831. TEST_CASE("Overloads") {
  832. StaticJsonDocument<256> doc;
  833. StaticJsonDocument<256> filter;
  834. using namespace DeserializationOption;
  835. // deserializeMsgPack(..., Filter)
  836. SECTION("const char*, Filter") {
  837. deserializeMsgPack(doc, "{}", Filter(filter));
  838. }
  839. SECTION("const char*, size_t, Filter") {
  840. deserializeMsgPack(doc, "{}", 2, Filter(filter));
  841. }
  842. SECTION("const std::string&, Filter") {
  843. deserializeMsgPack(doc, std::string("{}"), Filter(filter));
  844. }
  845. SECTION("std::istream&, Filter") {
  846. std::stringstream s("{}");
  847. deserializeMsgPack(doc, s, Filter(filter));
  848. }
  849. #ifdef HAS_VARIABLE_LENGTH_ARRAY
  850. SECTION("char[n], Filter") {
  851. size_t i = 4;
  852. char vla[i];
  853. strcpy(vla, "{}");
  854. deserializeMsgPack(doc, vla, Filter(filter));
  855. }
  856. #endif
  857. // deserializeMsgPack(..., Filter, NestingLimit)
  858. SECTION("const char*, Filter, NestingLimit") {
  859. deserializeMsgPack(doc, "{}", Filter(filter), NestingLimit(5));
  860. }
  861. SECTION("const char*, size_t, Filter, NestingLimit") {
  862. deserializeMsgPack(doc, "{}", 2, Filter(filter), NestingLimit(5));
  863. }
  864. SECTION("const std::string&, Filter, NestingLimit") {
  865. deserializeMsgPack(doc, std::string("{}"), Filter(filter), NestingLimit(5));
  866. }
  867. SECTION("std::istream&, Filter, NestingLimit") {
  868. std::stringstream s("{}");
  869. deserializeMsgPack(doc, s, Filter(filter), NestingLimit(5));
  870. }
  871. #ifdef HAS_VARIABLE_LENGTH_ARRAY
  872. SECTION("char[n], Filter, NestingLimit") {
  873. size_t i = 4;
  874. char vla[i];
  875. strcpy(vla, "{}");
  876. deserializeMsgPack(doc, vla, Filter(filter), NestingLimit(5));
  877. }
  878. #endif
  879. // deserializeMsgPack(..., NestingLimit, Filter)
  880. SECTION("const char*, NestingLimit, Filter") {
  881. deserializeMsgPack(doc, "{}", NestingLimit(5), Filter(filter));
  882. }
  883. SECTION("const char*, size_t, NestingLimit, Filter") {
  884. deserializeMsgPack(doc, "{}", 2, NestingLimit(5), Filter(filter));
  885. }
  886. SECTION("const std::string&, NestingLimit, Filter") {
  887. deserializeMsgPack(doc, std::string("{}"), NestingLimit(5), Filter(filter));
  888. }
  889. SECTION("std::istream&, NestingLimit, Filter") {
  890. std::stringstream s("{}");
  891. deserializeMsgPack(doc, s, NestingLimit(5), Filter(filter));
  892. }
  893. #ifdef HAS_VARIABLE_LENGTH_ARRAY
  894. SECTION("char[n], NestingLimit, Filter") {
  895. size_t i = 4;
  896. char vla[i];
  897. strcpy(vla, "{}");
  898. deserializeMsgPack(doc, vla, NestingLimit(5), Filter(filter));
  899. }
  900. #endif
  901. }