Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
trackrdrd
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
trackrdrd
Commits
97e0917b
Commit
97e0917b
authored
May 01, 2015
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use fixed buffers safely when reading a config file
parent
9ca63b77
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
7 deletions
+39
-7
config_common.c
src/config_common.c
+39
-7
No files found.
src/config_common.c
View file @
97e0917b
...
...
@@ -33,6 +33,9 @@
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include "config.h"
#include "config_common.h"
...
...
@@ -60,10 +63,24 @@ conf_ParseLine(char *ptr, char **lval, char **rval)
return
(
0
);
}
static
int
conf_get_line
(
char
*
line
,
FILE
*
in
)
{
#ifdef HAVE_GETLINE
size_t
n
=
BUFSIZ
;
errno
=
0
;
return
(
getline
(
&
line
,
&
n
,
in
));
#else
if
(
fgets
(
line
,
BUFSIZ
,
in
)
==
NULL
)
return
-
1
;
return
0
;
#endif
}
int
CONF_ReadFile
(
const
char
*
file
,
conf_add_f
*
conf_add
)
{
FILE
*
in
;
char
line
[
BUFSIZ
]
;
char
*
line
;
int
linenum
=
0
;
in
=
fopen
(
file
,
"r"
);
...
...
@@ -72,7 +89,10 @@ CONF_ReadFile(const char *file, conf_add_f *conf_add) {
return
(
-
1
);
}
while
(
fgets
(
line
,
BUFSIZ
,
in
)
!=
NULL
)
{
line
=
(
char
*
)
malloc
(
BUFSIZ
);
if
(
line
==
NULL
)
return
ENOMEM
;
while
(
conf_get_line
(
line
,
in
)
!=
-
1
)
{
char
orig
[
BUFSIZ
];
linenum
++
;
...
...
@@ -92,7 +112,7 @@ CONF_ReadFile(const char *file, conf_add_f *conf_add) {
ptr
=
line
;
while
(
isspace
(
*
ptr
)
&&
*++
ptr
)
;
str
cpy
(
orig
,
ptr
);
str
ncpy
(
orig
,
ptr
,
BUFSIZ
);
char
*
lval
,
*
rval
;
if
(
conf_ParseLine
(
ptr
,
&
lval
,
&
rval
)
!=
0
)
{
fprintf
(
stderr
,
"Cannot parse %s line %d: '%s'
\n
"
,
file
,
linenum
,
...
...
@@ -107,5 +127,17 @@ CONF_ReadFile(const char *file, conf_add_f *conf_add) {
return
(
-
1
);
}
}
return
(
0
);
int
ret
=
0
;
if
(
ferror
(
in
))
{
fprintf
(
stderr
,
"Error reading file %s (errno %d: %s)
\n
"
,
file
,
errno
,
strerror
(
errno
));
ret
=
-
1
;
}
errno
=
0
;
if
(
fclose
(
in
)
!=
0
)
{
fprintf
(
stderr
,
"Error closing file %s: %s)
\n
"
,
file
,
strerror
(
errno
));
ret
=
-
1
;
}
free
(
line
);
return
(
ret
);
}
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