diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-23 22:36:49 +0300 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-25 23:29:08 +0300 |
commit | 1e921369b2c92bb219fcef84a37d4d2347794c0f (patch) | |
tree | d82eb28afdecfdd88ef5d5bfa06122f8cb50a805 | |
parent | f9b7c9b648d1eaf0f84eb5bd6d79c3863a9421be (diff) |
Since mtar_write_file/dir_header() modify the cached header,
they should perform API checks to detect incorrect usage.
-rw-r--r-- | src/microtar.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/microtar.c b/src/microtar.c index eaf4f34..e060637 100644 --- a/src/microtar.c +++ b/src/microtar.c @@ -570,6 +570,14 @@ int mtar_update_header(mtar_t* tar, const mtar_header_t* h) int mtar_write_file_header(mtar_t* tar, const char* name, unsigned size) { +#ifndef MICROTAR_DISABLE_API_CHECKS + if(tar->access != MTAR_WRITE) + return MTAR_EACCESS; + if(((tar->state & S_WROTE_DATA) && !(tar->state & S_WROTE_DATA_EOF)) || + (tar->state & S_WROTE_FINALIZE)) + return MTAR_EAPI; +#endif + size_t namelen = strlen(name); if(namelen > NAME_LEN) return MTAR_ENAMETOOLONG; @@ -588,6 +596,14 @@ int mtar_write_file_header(mtar_t* tar, const char* name, unsigned size) int mtar_write_dir_header(mtar_t* tar, const char* name) { +#ifndef MICROTAR_DISABLE_API_CHECKS + if(tar->access != MTAR_WRITE) + return MTAR_EACCESS; + if(((tar->state & S_WROTE_DATA) && !(tar->state & S_WROTE_DATA_EOF)) || + (tar->state & S_WROTE_FINALIZE)) + return MTAR_EAPI; +#endif + size_t namelen = strlen(name); if(namelen > NAME_LEN) return MTAR_ENAMETOOLONG; |