@@ -187,94 +187,65 @@ static void test_base32hexmem(void) {
187187 free (b32 );
188188}
189189
190- static void test_unbase32hexmem ( void ) {
191- void * mem ;
190+ static void test_unbase32hexmem_one ( const char * hex , bool padding , int retval , const char * ans ) {
191+ _cleanup_free_ void * mem = NULL ;
192192 size_t len ;
193193
194- assert_se (unbase32hexmem ("" , STRLEN ("" ), true, & mem , & len ) == 0 );
195- assert_se (streq (strndupa (mem , len ), "" ));
196- free (mem );
197-
198- assert_se (unbase32hexmem ("CO======" , STRLEN ("CO======" ), true, & mem , & len ) == 0 );
199- assert_se (streq (strndupa (mem , len ), "f" ));
200- free (mem );
201-
202- assert_se (unbase32hexmem ("CPNG====" , STRLEN ("CPNG====" ), true, & mem , & len ) == 0 );
203- assert_se (streq (strndupa (mem , len ), "fo" ));
204- free (mem );
205-
206- assert_se (unbase32hexmem ("CPNMU===" , STRLEN ("CPNMU===" ), true, & mem , & len ) == 0 );
207- assert_se (streq (strndupa (mem , len ), "foo" ));
208- free (mem );
209-
210- assert_se (unbase32hexmem ("CPNMUOG=" , STRLEN ("CPNMUOG=" ), true, & mem , & len ) == 0 );
211- assert_se (streq (strndupa (mem , len ), "foob" ));
212- free (mem );
213-
214- assert_se (unbase32hexmem ("CPNMUOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == 0 );
215- assert_se (streq (strndupa (mem , len ), "fooba" ));
216- free (mem );
217-
218- assert_se (unbase32hexmem ("CPNMUOJ1E8======" , STRLEN ("CPNMUOJ1E8======" ), true, & mem , & len ) == 0 );
219- assert_se (streq (strndupa (mem , len ), "foobar" ));
220- free (mem );
221-
222- assert_se (unbase32hexmem ("A" , STRLEN ("A" ), true, & mem , & len ) == - EINVAL );
223- assert_se (unbase32hexmem ("A=======" , STRLEN ("A=======" ), true, & mem , & len ) == - EINVAL );
224- assert_se (unbase32hexmem ("AAA=====" , STRLEN ("AAA=====" ), true, & mem , & len ) == - EINVAL );
225- assert_se (unbase32hexmem ("AAAAAA==" , STRLEN ("AAAAAA==" ), true, & mem , & len ) == - EINVAL );
226- assert_se (unbase32hexmem ("AB======" , STRLEN ("AB======" ), true, & mem , & len ) == - EINVAL );
227- assert_se (unbase32hexmem ("AAAB====" , STRLEN ("AAAB====" ), true, & mem , & len ) == - EINVAL );
228- assert_se (unbase32hexmem ("AAAAB===" , STRLEN ("AAAAB===" ), true, & mem , & len ) == - EINVAL );
229- assert_se (unbase32hexmem ("AAAAAAB=" , STRLEN ("AAAAAAB=" ), true, & mem , & len ) == - EINVAL );
230-
231- assert_se (unbase32hexmem ("XPNMUOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
232- assert_se (unbase32hexmem ("CXNMUOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
233- assert_se (unbase32hexmem ("CPXMUOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
234- assert_se (unbase32hexmem ("CPNXUOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
235- assert_se (unbase32hexmem ("CPNMXOJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
236- assert_se (unbase32hexmem ("CPNMUXJ1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
237- assert_se (unbase32hexmem ("CPNMUOX1" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
238- assert_se (unbase32hexmem ("CPNMUOJX" , STRLEN ("CPNMUOJ1" ), true, & mem , & len ) == - EINVAL );
239-
240- assert_se (unbase32hexmem ("" , STRLEN ("" ), false, & mem , & len ) == 0 );
241- assert_se (streq (strndupa (mem , len ), "" ));
242- free (mem );
243-
244- assert_se (unbase32hexmem ("CO" , STRLEN ("CO" ), false, & mem , & len ) == 0 );
245- assert_se (streq (strndupa (mem , len ), "f" ));
246- free (mem );
247-
248- assert_se (unbase32hexmem ("CPNG" , STRLEN ("CPNG" ), false, & mem , & len ) == 0 );
249- assert_se (streq (strndupa (mem , len ), "fo" ));
250- free (mem );
251-
252- assert_se (unbase32hexmem ("CPNMU" , STRLEN ("CPNMU" ), false, & mem , & len ) == 0 );
253- assert_se (streq (strndupa (mem , len ), "foo" ));
254- free (mem );
255-
256- assert_se (unbase32hexmem ("CPNMUOG" , STRLEN ("CPNMUOG" ), false, & mem , & len ) == 0 );
257- assert_se (streq (strndupa (mem , len ), "foob" ));
258- free (mem );
259-
260- assert_se (unbase32hexmem ("CPNMUOJ1" , STRLEN ("CPNMUOJ1" ), false, & mem , & len ) == 0 );
261- assert_se (streq (strndupa (mem , len ), "fooba" ));
262- free (mem );
263-
264- assert_se (unbase32hexmem ("CPNMUOJ1E8" , STRLEN ("CPNMUOJ1E8" ), false, & mem , & len ) == 0 );
265- assert_se (streq (strndupa (mem , len ), "foobar" ));
266- free (mem );
267-
268- assert_se (unbase32hexmem ("CPNMUOG=" , STRLEN ("CPNMUOG=" ), false, & mem , & len ) == - EINVAL );
269- assert_se (unbase32hexmem ("CPNMUOJ1E8======" , STRLEN ("CPNMUOJ1E8======" ), false, & mem , & len ) == - EINVAL );
270- assert_se (unbase32hexmem ("A" , STRLEN ("A" ), false, & mem , & len ) == - EINVAL );
271- assert_se (unbase32hexmem ("A" , STRLEN ("A" ), false, & mem , & len ) == - EINVAL );
272- assert_se (unbase32hexmem ("AAA" , STRLEN ("AAA" ), false, & mem , & len ) == - EINVAL );
273- assert_se (unbase32hexmem ("AAAAAA" , STRLEN ("AAAAAA" ), false, & mem , & len ) == - EINVAL );
274- assert_se (unbase32hexmem ("AB" , STRLEN ("AB" ), false, & mem , & len ) == - EINVAL );
275- assert_se (unbase32hexmem ("AAAB" , STRLEN ("AAAB" ), false, & mem , & len ) == - EINVAL );
276- assert_se (unbase32hexmem ("AAAAB" , STRLEN ("AAAAB" ), false, & mem , & len ) == - EINVAL );
277- assert_se (unbase32hexmem ("AAAAAAB" , STRLEN ("AAAAAAB" ), false, & mem , & len ) == - EINVAL );
194+ assert_se (unbase32hexmem (hex , (size_t ) -1 , padding , & mem , & len ) == retval );
195+ if (retval == 0 ) {
196+ char * str ;
197+
198+ str = strndupa (mem , len );
199+ assert_se (streq (str , ans ));
200+ }
201+ }
202+
203+ static void test_unbase32hexmem (void ) {
204+ test_unbase32hexmem_one ("" , true, 0 , "" );
205+
206+ test_unbase32hexmem_one ("CO======" , true, 0 , "f" );
207+ test_unbase32hexmem_one ("CPNG====" , true, 0 , "fo" );
208+ test_unbase32hexmem_one ("CPNMU===" , true, 0 , "foo" );
209+ test_unbase32hexmem_one ("CPNMUOG=" , true, 0 , "foob" );
210+ test_unbase32hexmem_one ("CPNMUOJ1" , true, 0 , "fooba" );
211+ test_unbase32hexmem_one ("CPNMUOJ1E8======" , true, 0 , "foobar" );
212+
213+ test_unbase32hexmem_one ("A" , true, - EINVAL , NULL );
214+ test_unbase32hexmem_one ("A=======" , true, - EINVAL , NULL );
215+ test_unbase32hexmem_one ("AAA=====" , true, - EINVAL , NULL );
216+ test_unbase32hexmem_one ("AAAAAA==" , true, - EINVAL , NULL );
217+ test_unbase32hexmem_one ("AB======" , true, - EINVAL , NULL );
218+ test_unbase32hexmem_one ("AAAB====" , true, - EINVAL , NULL );
219+ test_unbase32hexmem_one ("AAAAB===" , true, - EINVAL , NULL );
220+ test_unbase32hexmem_one ("AAAAAAB=" , true, - EINVAL , NULL );
221+
222+ test_unbase32hexmem_one ("XPNMUOJ1" , true, - EINVAL , NULL );
223+ test_unbase32hexmem_one ("CXNMUOJ1" , true, - EINVAL , NULL );
224+ test_unbase32hexmem_one ("CPXMUOJ1" , true, - EINVAL , NULL );
225+ test_unbase32hexmem_one ("CPNXUOJ1" , true, - EINVAL , NULL );
226+ test_unbase32hexmem_one ("CPNMXOJ1" , true, - EINVAL , NULL );
227+ test_unbase32hexmem_one ("CPNMUXJ1" , true, - EINVAL , NULL );
228+ test_unbase32hexmem_one ("CPNMUOX1" , true, - EINVAL , NULL );
229+ test_unbase32hexmem_one ("CPNMUOJX" , true, - EINVAL , NULL );
230+
231+ test_unbase32hexmem_one ("" , false, 0 , "" );
232+ test_unbase32hexmem_one ("CO" , false, 0 , "f" );
233+ test_unbase32hexmem_one ("CPNG" , false, 0 , "fo" );
234+ test_unbase32hexmem_one ("CPNMU" , false, 0 , "foo" );
235+ test_unbase32hexmem_one ("CPNMUOG" , false, 0 , "foob" );
236+ test_unbase32hexmem_one ("CPNMUOJ1" , false, 0 , "fooba" );
237+ test_unbase32hexmem_one ("CPNMUOJ1E8" , false, 0 , "foobar" );
238+ test_unbase32hexmem_one ("CPNMUOG=" , false, - EINVAL , NULL );
239+ test_unbase32hexmem_one ("CPNMUOJ1E8======" , false, - EINVAL , NULL );
240+
241+ test_unbase32hexmem_one ("A" , false, - EINVAL , NULL );
242+ test_unbase32hexmem_one ("A" , false, - EINVAL , NULL );
243+ test_unbase32hexmem_one ("AAA" , false, - EINVAL , NULL );
244+ test_unbase32hexmem_one ("AAAAAA" , false, - EINVAL , NULL );
245+ test_unbase32hexmem_one ("AB" , false, - EINVAL , NULL );
246+ test_unbase32hexmem_one ("AAAB" , false, - EINVAL , NULL );
247+ test_unbase32hexmem_one ("AAAAB" , false, - EINVAL , NULL );
248+ test_unbase32hexmem_one ("AAAAAAB" , false, - EINVAL , NULL );
278249}
279250
280251/* https://tools.ietf.org/html/rfc4648#section-10 */
0 commit comments