Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
asn1c
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
asn1c
Commits
dd01a5e5
Commit
dd01a5e5
authored
Oct 14, 2017
by
Lev Walkin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OER support for UTCTime and GeneralizedTime, also fuzz-testing
parent
2ed11835
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
145 additions
and
11 deletions
+145
-11
skeletons/GeneralizedTime.c
skeletons/GeneralizedTime.c
+56
-4
skeletons/GeneralizedTime.h
skeletons/GeneralizedTime.h
+1
-1
skeletons/UTCTime.c
skeletons/UTCTime.c
+33
-5
skeletons/UTCTime.h
skeletons/UTCTime.h
+1
-1
tests/tests-randomized/Makefile.am
tests/tests-randomized/Makefile.am
+2
-0
tests/tests-randomized/bundles/11-UTCTime-bundle.txt
tests/tests-randomized/bundles/11-UTCTime-bundle.txt
+1
-0
tests/tests-randomized/bundles/12-GeneralizedTime-bundle.txt
tests/tests-randomized/bundles/12-GeneralizedTime-bundle.txt
+1
-0
tests/tests-skeletons/check-GeneralizedTime.c
tests/tests-skeletons/check-GeneralizedTime.c
+25
-0
tests/tests-skeletons/check-UTCTime.c
tests/tests-skeletons/check-UTCTime.c
+25
-0
No files found.
skeletons/GeneralizedTime.c
View file @
dd01a5e5
...
...
@@ -176,7 +176,7 @@ static asn_per_constraints_t asn_DEF_GeneralizedTime_per_constraints = {
asn_TYPE_operation_t
asn_OP_GeneralizedTime
=
{
OCTET_STRING_free
,
GeneralizedTime_print
,
OCTET_STRING_compare
,
/* Does not normalize time zones! */
GeneralizedTime_compare
,
OCTET_STRING_decode_ber
,
/* Implemented in terms of OCTET STRING */
GeneralizedTime_encode_der
,
OCTET_STRING_decode_xer_utf8
,
...
...
@@ -185,8 +185,8 @@ asn_TYPE_operation_t asn_OP_GeneralizedTime = {
0
,
0
,
#else
0
,
0
,
OCTET_STRING_decode_oer
,
OCTET_STRING_encode_oer
,
#endif
/* ASN_DISABLE_OER_SUPPORT */
#ifdef ASN_DISABLE_PER_SUPPORT
0
,
...
...
@@ -739,7 +739,7 @@ GeneralizedTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
(
void
)
constraints
;
if
(
max_length
<
sizeof
(
"yyyymmddhhmmss"
))
{
if
(
max_length
<
sizeof
(
"yyyymmddhhmmss"
)
&&
!*
sptr
)
{
return
result_skipped
;
}
...
...
@@ -754,3 +754,55 @@ GeneralizedTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
return
result_ok
;
}
int
GeneralizedTime_compare
(
const
asn_TYPE_descriptor_t
*
td
,
const
void
*
aptr
,
const
void
*
bptr
)
{
const
GeneralizedTime_t
*
a
=
aptr
;
const
GeneralizedTime_t
*
b
=
bptr
;
(
void
)
td
;
if
(
a
&&
b
)
{
int
afrac_value
,
afrac_digits
;
int
bfrac_value
,
bfrac_digits
;
time_t
at
=
asn_GT2time_frac
(
a
,
&
afrac_value
,
&
afrac_digits
,
0
,
0
);
time_t
bt
=
asn_GT2time_frac
(
b
,
&
bfrac_value
,
&
bfrac_digits
,
0
,
0
);
if
(
at
<
bt
)
{
return
-
1
;
}
else
if
(
at
>
bt
)
{
return
1
;
}
else
if
(
afrac_digits
==
bfrac_digits
)
{
if
(
afrac_value
==
bfrac_value
)
{
return
0
;
}
if
(
afrac_value
<
bfrac_value
)
{
return
-
1
;
}
else
{
return
1
;
}
}
else
if
(
afrac_digits
==
0
)
{
return
-
1
;
}
else
if
(
bfrac_digits
==
0
)
{
return
1
;
}
else
{
double
afrac
=
(
double
)
afrac_value
/
afrac_digits
;
double
bfrac
=
(
double
)
bfrac_value
/
bfrac_digits
;
if
(
afrac
<
bfrac
)
{
return
-
1
;
}
else
if
(
afrac
>
bfrac
)
{
return
1
;
}
else
{
return
0
;
}
}
}
else
if
(
!
a
&&
!
b
)
{
return
0
;
}
else
if
(
!
a
)
{
return
-
1
;
}
else
{
return
1
;
}
}
skeletons/GeneralizedTime.h
View file @
dd01a5e5
...
...
@@ -17,13 +17,13 @@ extern asn_TYPE_descriptor_t asn_DEF_GeneralizedTime;
extern
asn_TYPE_operation_t
asn_OP_GeneralizedTime
;
asn_struct_print_f
GeneralizedTime_print
;
asn_struct_compare_f
GeneralizedTime_compare
;
asn_constr_check_f
GeneralizedTime_constraint
;
der_type_encoder_f
GeneralizedTime_encode_der
;
xer_type_encoder_f
GeneralizedTime_encode_xer
;
asn_random_fill_f
GeneralizedTime_random_fill
;
#define GeneralizedTime_free OCTET_STRING_free
#define GeneralizedTime_compare OCTET_STRING_compare
#define GeneralizedTime_decode_ber OCTET_STRING_decode_ber
#define GeneralizedTime_decode_xer OCTET_STRING_decode_xer_utf8
#define GeneralizedTime_decode_uper OCTET_STRING_decode_uper
...
...
skeletons/UTCTime.c
View file @
dd01a5e5
...
...
@@ -31,7 +31,7 @@ static asn_per_constraints_t asn_DEF_UTCTime_constraints = {
asn_TYPE_operation_t
asn_OP_UTCTime
=
{
OCTET_STRING_free
,
UTCTime_print
,
OCTET_STRING_compare
,
/* Does not deal with time zones. */
UTCTime_compare
,
OCTET_STRING_decode_ber
,
/* Implemented in terms of OCTET STRING */
OCTET_STRING_encode_der
,
/* Implemented in terms of OCTET STRING */
OCTET_STRING_decode_xer_utf8
,
...
...
@@ -40,8 +40,8 @@ asn_TYPE_operation_t asn_OP_UTCTime = {
0
,
0
,
#else
0
,
0
,
OCTET_STRING_decode_oer
,
OCTET_STRING_encode_oer
,
#endif
/* ASN_DISABLE_OER_SUPPORT */
#ifdef ASN_DISABLE_PER_SUPPORT
0
,
...
...
@@ -109,7 +109,7 @@ UTCTime_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
ASN__ENCODE_FAILED
;
/* Fractions are not allowed in UTCTime */
ut
=
asn_time2
GT
(
0
,
0
,
1
);
ut
=
asn_time2
UT
(
0
,
&
tm
,
1
);
if
(
!
ut
)
ASN__ENCODE_FAILED
;
rv
=
OCTET_STRING_encode_xer_utf8
(
td
,
sptr
,
ilevel
,
flags
,
...
...
@@ -210,7 +210,7 @@ UTCTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
(
void
)
constraints
;
if
(
max_length
<
sizeof
(
"yymmddhhmmss"
))
{
if
(
max_length
<
sizeof
(
"yymmddhhmmss"
)
&&
!*
sptr
)
{
return
result_skipped
;
}
...
...
@@ -225,3 +225,31 @@ UTCTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
return
result_ok
;
}
int
UTCTime_compare
(
const
asn_TYPE_descriptor_t
*
td
,
const
void
*
aptr
,
const
void
*
bptr
)
{
const
GeneralizedTime_t
*
a
=
aptr
;
const
GeneralizedTime_t
*
b
=
bptr
;
(
void
)
td
;
if
(
a
&&
b
)
{
time_t
at
=
asn_UT2time
(
a
,
0
,
0
);
time_t
bt
=
asn_UT2time
(
b
,
0
,
0
);
if
(
at
<
bt
)
{
return
-
1
;
}
else
if
(
at
>
bt
)
{
return
1
;
}
else
{
return
0
;
}
}
else
if
(
!
a
&&
!
b
)
{
return
0
;
}
else
if
(
!
a
)
{
return
-
1
;
}
else
{
return
1
;
}
}
skeletons/UTCTime.h
View file @
dd01a5e5
...
...
@@ -17,12 +17,12 @@ extern asn_TYPE_descriptor_t asn_DEF_UTCTime;
extern
asn_TYPE_operation_t
asn_OP_UTCTime
;
asn_struct_print_f
UTCTime_print
;
asn_struct_compare_f
UTCTime_compare
;
asn_constr_check_f
UTCTime_constraint
;
xer_type_encoder_f
UTCTime_encode_xer
;
asn_random_fill_f
UTCTime_random_fill
;
#define UTCTime_free OCTET_STRING_free
#define UTCTime_compare OCTET_STRING_compare
#define UTCTime_decode_ber OCTET_STRING_decode_ber
#define UTCTime_encode_der OCTET_STRING_encode_der
#define UTCTime_decode_xer OCTET_STRING_decode_xer_utf8
...
...
tests/tests-randomized/Makefile.am
View file @
dd01a5e5
...
...
@@ -34,6 +34,8 @@ TESTS += bundles/07-VisibleString-bundle.txt
TESTS
+=
bundles/08-OBJECT-IDENTIFIER-bundle.txt
TESTS
+=
bundles/09-RELATIVE-OID-bundle.txt
TESTS
+=
bundles/10-UTF8String-bundle.txt
TESTS
+=
bundles/11-UTCTime-bundle.txt
TESTS
+=
bundles/12-GeneralizedTime-bundle.txt
EXTRA_DIST
=
\
random-test-driver.c
\
...
...
tests/tests-randomized/bundles/11-UTCTime-bundle.txt
0 → 100644
View file @
dd01a5e5
UTCTime
tests/tests-randomized/bundles/12-GeneralizedTime-bundle.txt
0 → 100644
View file @
dd01a5e5
GeneralizedTime
tests/tests-skeletons/check-GeneralizedTime.c
View file @
dd01a5e5
...
...
@@ -188,6 +188,21 @@ check_fractions() {
FREEMEM
(
gt
);
}
static
void
compare
(
int
lineno
,
int
cmp_control
,
const
char
*
astr
,
const
char
*
bstr
)
{
GeneralizedTime_t
a
=
{(
uint8_t
*
)
strdup
(
astr
),
strlen
(
astr
)};
GeneralizedTime_t
b
=
{(
uint8_t
*
)
strdup
(
bstr
),
strlen
(
bstr
)};
int
cmp_result
=
asn_DEF_GeneralizedTime
.
op
->
compare_struct
(
&
asn_DEF_GeneralizedTime
,
&
a
,
&
b
);
if
(
cmp_result
!=
cmp_control
)
{
fprintf
(
stderr
,
"%03d: [%s] == [%s] = %d, expected %d
\n
"
,
lineno
,
astr
,
bstr
,
cmp_result
,
cmp_control
);
assert
(
cmp_result
==
cmp_control
);
}
ASN_STRUCT_RESET
(
asn_DEF_GeneralizedTime
,
&
a
);
ASN_STRUCT_RESET
(
asn_DEF_GeneralizedTime
,
&
b
);
}
int
main
(
int
ac
,
char
**
av
)
{
char
*
tz
=
getenv
(
"TZ"
);
...
...
@@ -264,6 +279,16 @@ main(int ac, char **av) {
RECODE
(
"20050702123312.0080010+1056"
,
"20050702013712.008001Z"
);
#endif
compare
(
__LINE__
,
0
,
"20040125093007"
,
"20040125093007"
);
compare
(
__LINE__
,
0
,
"20040125093007-0000"
,
"20040125093007Z"
);
compare
(
__LINE__
,
1
,
"20040125093008"
,
"20040125093007"
);
compare
(
__LINE__
,
1
,
"20040125093008-0000"
,
"20040125093007-0000"
);
compare
(
__LINE__
,
0
,
"20040125093008-0000"
,
"20040125093008-0000"
);
compare
(
__LINE__
,
1
,
"20040125093008-0000"
,
"20040125093007Z"
);
compare
(
__LINE__
,
0
,
"20040125093007-0000"
,
"20040125093007+0000"
);
compare
(
__LINE__
,
1
,
"20040125093007-0030"
,
"20040125093007Z"
);
compare
(
__LINE__
,
-
1
,
"20040125093007+0030"
,
"20040125093007Z"
);
return
0
;
}
tests/tests-skeletons/check-UTCTime.c
View file @
dd01a5e5
...
...
@@ -33,6 +33,21 @@ check(char *time_str, time_t sample, int as_gmt) {
if
(
as_gmt
)
check
(
time_str
,
sample
,
as_gmt
);
}
static
void
compare
(
int
lineno
,
int
cmp_control
,
const
char
*
astr
,
const
char
*
bstr
)
{
UTCTime_t
a
=
{(
uint8_t
*
)
strdup
(
astr
),
strlen
(
astr
)};
UTCTime_t
b
=
{(
uint8_t
*
)
strdup
(
bstr
),
strlen
(
bstr
)};
int
cmp_result
=
asn_DEF_UTCTime
.
op
->
compare_struct
(
&
asn_DEF_UTCTime
,
&
a
,
&
b
);
if
(
cmp_result
!=
cmp_control
)
{
fprintf
(
stderr
,
"%03d: [%s] == [%s] = %d, expected %d
\n
"
,
lineno
,
astr
,
bstr
,
cmp_result
,
cmp_control
);
assert
(
cmp_result
==
cmp_control
);
}
ASN_STRUCT_RESET
(
asn_DEF_UTCTime
,
&
a
);
ASN_STRUCT_RESET
(
asn_DEF_UTCTime
,
&
b
);
}
int
main
(
int
ac
,
char
**
av
)
{
...
...
@@ -57,6 +72,16 @@ main(int ac, char **av) {
check
(
"040125093000,1234"
,
1075051800
,
0
);
}
compare
(
__LINE__
,
0
,
"040125093007"
,
"040125093007"
);
compare
(
__LINE__
,
0
,
"040125093007-0000"
,
"040125093007Z"
);
compare
(
__LINE__
,
1
,
"040125093008"
,
"040125093007"
);
compare
(
__LINE__
,
1
,
"040125093008-0000"
,
"040125093007-0000"
);
compare
(
__LINE__
,
0
,
"040125093008-0000"
,
"040125093008-0000"
);
compare
(
__LINE__
,
1
,
"040125093008-0000"
,
"040125093007Z"
);
compare
(
__LINE__
,
0
,
"040125093007-0000"
,
"040125093007+0000"
);
compare
(
__LINE__
,
1
,
"040125093007-0030"
,
"040125093007Z"
);
compare
(
__LINE__
,
-
1
,
"040125093007+0030"
,
"040125093007Z"
);
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment