Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/amachronic/microtar.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2021-11-23 22:36:49 +0300
committerAidan MacDonald <amachronic@protonmail.com>2021-11-25 23:29:08 +0300
commit1e921369b2c92bb219fcef84a37d4d2347794c0f (patch)
treed82eb28afdecfdd88ef5d5bfa06122f8cb50a805
parentf9b7c9b648d1eaf0f84eb5bd6d79c3863a9421be (diff)
Add missing API checks to convienience functionsHEADmaster
Since mtar_write_file/dir_header() modify the cached header, they should perform API checks to detect incorrect usage.
-rw-r--r--src/microtar.c16
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;