summaryrefslogtreecommitdiffstats
path: root/ini/ini_fileobj.c
diff options
context:
space:
mode:
authorDmitri Pal <dpal@redhat.com>2010-11-27 23:49:19 -0500
committerStephen Gallagher <sgallagh@redhat.com>2010-12-21 11:16:09 -0500
commit490d3d9df1a2c666e262cd1fc9fd9f725871c8a1 (patch)
treeb64cd0bdba775a8e15c93abf71ff95954f704473 /ini/ini_fileobj.c
parentec246f748f8dcbeefd46125546364ed2aa3100ea (diff)
downloadding-libs-490d3d9df1a2c666e262cd1fc9fd9f725871c8a1.tar.gz
ding-libs-490d3d9df1a2c666e262cd1fc9fd9f725871c8a1.tar.xz
ding-libs-490d3d9df1a2c666e262cd1fc9fd9f725871c8a1.zip
Collision flag validation
Added validation of the collision flags at the interface boundary.
Diffstat (limited to 'ini/ini_fileobj.c')
-rw-r--r--ini/ini_fileobj.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/ini/ini_fileobj.c b/ini/ini_fileobj.c
index 29d5f90..699026c 100644
--- a/ini/ini_fileobj.c
+++ b/ini/ini_fileobj.c
@@ -33,6 +33,45 @@
#include "collection_tools.h"
+/* Check if collision flags are valid */
+static int valid_collision_flags(uint32_t collision_flags)
+{
+ uint32_t flag;
+
+ TRACE_FLOW_ENTRY();
+
+ flag = collision_flags & INI_MV1S_MASK;
+ if ((flag != INI_MV1S_OVERWRITE) &&
+ (flag != INI_MV1S_ERROR) &&
+ (flag != INI_MV1S_PRESERVE) &&
+ (flag != INI_MV1S_ALLOW)) {
+ TRACE_ERROR_STRING("Invalid value collision flag","");
+ return 0;
+ }
+
+ flag = collision_flags & INI_MV2S_MASK;
+ if ((flag != INI_MV2S_OVERWRITE) &&
+ (flag != INI_MV2S_ERROR) &&
+ (flag != INI_MV2S_PRESERVE) &&
+ (flag != INI_MV2S_ALLOW)) {
+ TRACE_ERROR_STRING("Invalid value cross-section collision flag","");
+ return 0;
+ }
+
+ flag = collision_flags & INI_MS_MASK;
+ if ((flag != INI_MS_MERGE) &&
+ (flag != INI_MS_OVERWRITE) &&
+ (flag != INI_MS_ERROR) &&
+ (flag != INI_MS_PRESERVE) &&
+ (flag != INI_MS_ALLOW)) {
+ TRACE_ERROR_STRING("Invalid section collision flag","");
+ return 0;
+ }
+
+ TRACE_FLOW_EXIT();
+ return 1;
+}
+
/* Close file context and destroy the object */
void ini_config_file_close(struct ini_cfgfile *file_ctx)
{
@@ -66,6 +105,12 @@ int ini_config_file_open(const char *filename,
return EINVAL;
}
+ if (!valid_collision_flags(collision_flags)) {
+ TRACE_ERROR_NUMBER("Invalid flags.", EINVAL);
+ return EINVAL;
+ }
+
+
/* Allocate structure */
errno = 0;
new_ctx = malloc(sizeof(struct ini_cfgfile));