Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion cf-agent/files_editline.c
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,13 @@ If no such region matches, begin_ptr and end_ptr should point to NULL
{
if (!include_start)
{
if (ip->next == NULL)
/* The start delimiter is the last line of the file, so the
* region (which excludes the delimiter) is empty and sits
* at end of file. Reject it only when select_end_match_eof
* is not set. Otherwise the empty region at EOF is a valid,
* selectable region so that e.g. a trailing INI section can
* still be populated (CFE-2663). */
if (ip->next == NULL && !a->region.select_end_match_eof)
{
Log(LOG_LEVEL_VERBOSE,
"The promised start pattern '%s' found an empty region at the end of file '%s'",
Expand Down
4 changes: 2 additions & 2 deletions cf-serverd/server_tls.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ bool ServerTLSPeek(ConnectionInfo *conn_info)

const int peek_size = CF_INBAND_OFFSET + sizeof("CAUTH");

char buf[peek_size];
ssize_t got = recv(ConnectionInfoSocket(conn_info), buf, sizeof(buf), MSG_PEEK);
char *buf = alloca(peek_size);
ssize_t got = recv(ConnectionInfoSocket(conn_info), buf, peek_size, MSG_PEEK);
assert(got <= peek_size);
if (got < 0)
{
Expand Down
5 changes: 2 additions & 3 deletions libpromises/evalfunction.c
Original file line number Diff line number Diff line change
Expand Up @@ -7396,9 +7396,8 @@ static FnCallResult FnCallClassFilterCsv(EvalContext *ctx,
}
else
{
size_t const key_len = PRINTSIZE(size_t);
char key[key_len];
xsnprintf(key, key_len, "%zu", i);
char key[PRINTSIZE(size_t)];
xsnprintf(key, PRINTSIZE(size_t), "%zu", i);

JsonObjectAppendString(class_container,
key,
Expand Down
2 changes: 1 addition & 1 deletion libpromises/ornaments.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ void PromiseBanner(EvalContext *ctx, const Promise *pp)
}

const size_t n = 2*CF_MAXFRAGMENT + 3;
char pretty_promise_name[n+1];
char *pretty_promise_name = alloca(n+1);
pretty_promise_name[0] = '\0';
StringAppendAbbreviatedPromise(pretty_promise_name, pp->promiser, n, CF_MAXFRAGMENT);
Log(LOG_LEVEL_VERBOSE, "P: Promiser/affected object: '%s'", pretty_promise_name);
Expand Down
5 changes: 3 additions & 2 deletions libpromises/syslog_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

#include <cf3.defs.h>


#define RFC3164_LENGTH 1024
/*
* Set by cf-agent/cf-serverd from body agent/server control.
*/
Expand Down Expand Up @@ -112,8 +114,7 @@ void RemoteSysLog(int log_priority, const char *log_string)
}
else
{
const size_t rfc3164_len = 1024;
char message[rfc3164_len];
char message[RFC3164_LENGTH];
char timebuffer[26];
pid_t pid = getpid();

Expand Down
80 changes: 80 additions & 0 deletions tests/acceptance/31_tickets/CFE-2663/test.cf
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
body file control
{
inputs => { "../../default.cf.sub" };
}

bundle agent __main__
{
methods:
"bundlesequence" usebundle => default("$(this.promise_filename)");
}

bundle agent init
{
vars:
# No trailing newline in the strings, so the "[section2]" header is
# genuinely the last line of the "actual" file. The region selected for
# section2 is therefore empty and sits at the end of the file.
"actual" string => "[section]
keyone=valueone
[section2]";
"expected" string => "[section]
keyone=valueone
[section2]
keytwo=valuetwo";
"files" slist => { "actual", "expected" };

files:
"$(G.testfile).$(files)"
create => "true",
edit_line => init_insert("$(init.$(files))"),
edit_defaults => init_empty;
}

bundle edit_line init_insert(str)
{
insert_lines:
"$(str)";
}

body edit_defaults init_empty
{
empty_file_before_editing => "true";
}

bundle agent test
{
meta:
"description"
string => "Insertion into an empty trailing region (the select_start delimiter is the last line of the file) must succeed when select_end_match_eof is true",
meta => { "CFE-2663" };

files:
"$(G.testfile).actual" edit_line => insert_into_trailing_section;
}

bundle edit_line insert_into_trailing_section
{
insert_lines:
"keytwo=valuetwo" select_region => ini_section("section2");
}

body select_region ini_section(x)
# @brief Restrict the edit to the lines in section [x], matching to EOF when
# [x] is the final section in the file.
{
select_start => "\[$(x)\]\s*";
select_end => "\[.*\]\s*";
select_end_match_eof => "true";
}

bundle agent check
{
methods:
"any"
usebundle => dcs_check_diff(
"$(G.testfile).actual",
"$(G.testfile).expected",
"$(this.promise_filename)"
);
}
2 changes: 1 addition & 1 deletion tests/acceptance/mock_package_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
static char AVAILABLE_PACKAGES_FILE_NAME[PATH_MAX];
static char INSTALLED_PACKAGES_FILE_NAME[PATH_MAX];

static const int MAX_PACKAGE_ENTRY_LENGTH = 256;
#define MAX_PACKAGE_ENTRY_LENGTH 256

#define DEFAULT_ARCHITECTURE "x666"

Expand Down
Loading