From 8b90b51b1afb172a5aace8c4944f42af65fbc298 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 24 Jan 2023 10:30:32 -0800 Subject: [PATCH] Adjust the barcode to ASN range check and add test case to cover the check --- src/documents/consumer.py | 6 ++--- .../barcodes/barcode-128-asn-too-large.pdf | Bin 0 -> 23427 bytes src/documents/tests/test_barcodes.py | 21 ++++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf diff --git a/src/documents/consumer.py b/src/documents/consumer.py index c583abc600..bc344abb9d 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -140,13 +140,13 @@ class Consumer(LoggingMixin): if not self.override_asn: # check not necessary in case no ASN gets set return - # Validate the range is above zero and less than int32 max + # Validate the range is above zero and less than uint32_t max # otherwise, Whoosh can't handle it in the index - if self.override_asn < 0 or self.override_asn > 2_147_483_647: + if self.override_asn < 0 or self.override_asn > 0xFF_FF_FF_FF: self._fail( MESSAGE_ASN_RANGE, f"Not consuming {self.filename}: " - "Given ASN is out of range [0, 2147483647]", + f"Given ASN {self.override_asn} is out of range [0, 4,294,967,295]", ) if Document.objects.filter(archive_serial_number=self.override_asn).exists(): self._fail( diff --git a/src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf b/src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d190c8762e5573b39572f941dc9935d7c581a66 GIT binary patch literal 23427 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
    *=Aw`WF-X*E%< zD;dI6cZZL-h>sko^)l;>g5*O7qGO>rh4RaBqrhh zy`M5Uy1gDdh*D~S&31#j-H0=fUWQo~aQLzkxfmtKUM!al9uJvBTJjfmQk{Gw7sjqsaFZv z^JunP&!6v2)2~jh*Bra^l24+hX236RE^jfb+MW5NF7nlH?>8q6ZBjm-DRZ9g7ibQ( zKjB~CLg!0e*)nb{Ae<3}yr*i}q=xTcM~)e92sO8z+#2Ft8sKjq#e!TF0Y`!mC0#EE7upGRHy+Cs{?+~HD(>MB27`j3(Qqsd zID|x?U|2X7jsy^JI2-`sTxT2_kHp!3-JwNup&|hMKOqbt_-|K*{B&VpH6o@ErK1j> z)KvtcK;LqK>Vb9ZfBO+yC{KuMQE<*{phR%J6EPww4y-JINcJPT9m zNg6i^K7gD$_r0j{5G5lzg-WNnodo2*ZIkD@czC!_dC*$`&I4aq@rW0;STx)oKms5d zKwz;j9FiL}0Eq!?F&GRCk4J!bdjJJ;haj9g$&E92i0AG?AYdQ{i^tjnXw*LzV{iZl z51`Q)7>Gt7Q2>_ff#!zvhw|gs566F<{pJDi0{CNuLn2{tZq`7100(kMf7^mX1GdO- z(*V!*UoE)$j|*@!tZB6xk#A{5{D1fw1nwV5UHj;M=Ro+j%M(*OJnvOntJp#$70WM* z5{&ydJ*9Z@p)c=N@>_Zo$_f&Q`9yv9MK+n=VroE+CNU33y0_H;@$f$%=MQcsTs19` z6Ogz^2(eT>ld_RC;1j@jqoPIKE9kd5vpL9%0R4b;Zj$7ZE@D2 zxd$}=j`r(H>D14kj`pAMoA+g`*qmFMAPnV$MfTI$os3Ei)4`QJGX-b6R0Gy;KM)hK zwn?D=y>PzQ0Z)YguZkhMaZ|zjgMY7!LptA@1jT_{ukJiZi|uNKnsPI2?rz~m<7E$6 z&F26NFpwNC^D<17Of-BpPr6zH8j__&VeEO+&*G@Sim}2*>@TArN>pV(mKA zn)6U79CnQd0u8RwkZ{ae4UPQS7sTPgHSYo