Skip to content

Conversation

@estenberg
Copy link
Contributor

...pty string (php expects keys to be there)

… empty string (php expects keys to be there)
estenberg added a commit that referenced this pull request Feb 27, 2012
@estenberg estenberg merged commit 0496b1c into cfengine:master Feb 27, 2012
@sigurdteigen
Copy link
Contributor

I disagree with this change. NULL strings are not empty strings - it is not good practice to magically convert them inside of Json. We already had this discussion with Biswha in Oslo who wanted to do the same thing.

@estenberg
Copy link
Contributor Author

Ok, let's create a wrapper instead then.
Otherwise we would have to do something like

if(record->classRxInclude)
{
JsonObjectAppendString(role_entry, LABEL_ROLE_CLASSRX_INCLUDE,
record->classRxInclude);
}
if(record->classRxExclude)
{
JsonObjectAppendString(role_entry, LABEL_ROLE_CLASSRX_EXCLUDE,
record->classRxExclude);
}
if(record->bundleRxInclude)
{
JsonObjectAppendString(role_entry, LABEL_ROLE_BUNDLERX_INCLUDE,
record->bundleRxInclude);
}
if(record->bundleRxExclude)
{
JsonObjectAppendString(role_entry, LABEL_ROLE_BUNDLERX_EXCLUDE,
record->bundleRxExclude);
}

(pretty much) everywhere we use it, which is verbose and error-prone.

On 27/02/12 15:17, Sigurd Teigen wrote:

I disagree with this change. NULL strings are not empty strings - it is not good practice to magically convert them inside of Json. We already had this discussion with Biswha in Oslo who wanted to do the same thing.


Reply to this email directly or view it on GitHub:
#7 (comment)

Eystein

@sigurdteigen
Copy link
Contributor

Yes, a wrapper function would be the way to do it, e.g. JsonObjectAppendPHPString().

@estenberg
Copy link
Contributor Author

Agreed, will revert & fix.

olehermanse added a commit that referenced this pull request Nov 18, 2019
An empty rlist is represented as a NULL pointer, so all Rlist
functions should handle NULL pointers at runtime.

Fixes an issue on FreeBSD, where RlistContainsString is
called on a NULL pointer (before any elements are added):

    Core was generated by `/var/cfengine/bin/cf-key'.
    Program terminated with signal SIGABRT, Aborted.
    #0  0x00000008024219ba in thr_kill () from /lib/libc.so.7
    (gdb) bt
    #0  0x00000008024219ba in thr_kill () from /lib/libc.so.7
    #1  0x0000000802421984 in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:52
    #2  0x00000008024218f9 in abort () at /usr/src/lib/libc/stdlib/abort.c:65
    #3  0x000000080249d101 in __assert (func=<optimized out>, file=<optimized out>, line=<optimized out>, failedexpr=<optimized out>)
        at /usr/src/lib/libc/gen/assert.c:51
    #4  0x00000008008cc5b5 in RlistContainsString (list=0x0, string=0x8048af320 "0a:14:50:21:f0:44") at rlist.c:292
    #5  0x00000008009163e1 in FindV6InterfacesInfo (ctx=0x80481c0c0, interfaces=0x7ffffffed098, hardware=0x7ffffffed090, ips=0x7ffffffed080)
        at unix_iface.c:704
    #6  0x0000000800915f16 in GetInterfacesInfo (ctx=0x80481c0c0) at unix_iface.c:565
    #7  0x00000008009142eb in DetectEnvironment (ctx=0x80481c0c0) at sysinfo.c:3304
    #8  0x00000008008ab30f in GenericAgentDiscoverContext (ctx=0x80481c0c0, config=0x80481c000) at generic_agent.c:537
    #9  0x000000000040231b in main (argc=1, argv=0x7fffffffeaa8) at cf-key.c:148

This was introduced recently, and I don't believe it's been
in any released packages, so no changelog entry.

Signed-off-by: Ole Herman Schumacher Elgesem <ole@northern.tech>
olehermanse added a commit that referenced this pull request Nov 28, 2019
When compiling with explicit CFLAGS / LDFLAGS these are not handled in
the same way in different automake files.

The way we are mixing user-provided flags with configure generated ones
is not ideal, this change doesn't fix that, but it at least makes it
more consistent.

For example, compiling like this:

```
./autogen.sh --enable-debug && make CFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address"
```

Would cause the explicit flags to override flags from configure when
building cf-agent, but not in cf-promises. The end result is that debug
info (line numbers) is missing in some places.

**Before change:**

```
Direct leak of 9 byte(s) in 1 object(s) allocated from:
    #0 0x7fc5c3640538 in strdup (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x77538)
    #1 0x7fc5c31badc0 in xstrdup /home/vagrant/cfe/core/libntech/libutils/alloc.c:58
    #2 0x559ddf51b064 in VerifyNotInFstab (/var/cfengine/bin/cf-agent+0xa0064)
    #3 0x559ddf4d6bd1 in VerifyMountPromise (/var/cfengine/bin/cf-agent+0x5bbd1)
    #4 0x559ddf4d506c in VerifyStoragePromise (/var/cfengine/bin/cf-agent+0x5a06c)
    #5 0x559ddf529cd9 in LocateFilePromiserGroup (/var/cfengine/bin/cf-agent+0xaecd9)
    #6 0x559ddf4d4a83 in FindStoragePromiserObjects (/var/cfengine/bin/cf-agent+0x59a83)
    #7 0x559ddf4d4a2d in FindAndVerifyStoragePromises (/var/cfengine/bin/cf-agent+0x59a2d)
    #8 0x559ddf4b7239 in KeepAgentPromise (/var/cfengine/bin/cf-agent+0x3c239)
    #9 0x7fc5c3138372 in ExpandPromiseAndDo /home/vagrant/cfe/core/libpromises/expand.c:215
    #10 0x7fc5c3138713 in ExpandPromise /home/vagrant/cfe/core/libpromises/expand.c:283
    #11 0x559ddf4b5e43 in ScheduleAgentOperations (/var/cfengine/bin/cf-agent+0x3ae43)
    #12 0x559ddf4b5656 in KeepPromiseBundles (/var/cfengine/bin/cf-agent+0x3a656)
    #13 0x559ddf4b2870 in KeepPromises (/var/cfengine/bin/cf-agent+0x37870)
    #14 0x559ddf4b025b in main (/var/cfengine/bin/cf-agent+0x3525b)
    #15 0x7fc5c238cb96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
```

**After change:**

```
Direct leak of 9 byte(s) in 1 object(s) allocated from:
    #0 0x7fb282da4538 in strdup (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x77538)
    #1 0x7fb28291edc0 in xstrdup /home/vagrant/cfe/core/libntech/libutils/alloc.c:58
    #2 0x55d8be8f6064 in VerifyNotInFstab /home/vagrant/cfe/core/cf-agent/nfs.c:541
    #3 0x55d8be8b1bd1 in VerifyMountPromise /home/vagrant/cfe/core/cf-agent/verify_storage.c:491
    #4 0x55d8be8b006c in VerifyStoragePromise /home/vagrant/cfe/core/cf-agent/verify_storage.c:146
    #5 0x55d8be904cd9 in LocateFilePromiserGroup /home/vagrant/cfe/core/cf-agent/promiser_regex_resolver.c:62
    #6 0x55d8be8afa83 in FindStoragePromiserObjects /home/vagrant/cfe/core/cf-agent/verify_storage.c:84
    #7 0x55d8be8afa2d in FindAndVerifyStoragePromises /home/vagrant/cfe/core/cf-agent/verify_storage.c:75
    #8 0x55d8be892239 in KeepAgentPromise /home/vagrant/cfe/core/cf-agent/cf-agent.c:1697
    #9 0x7fb28289c372 in ExpandPromiseAndDo /home/vagrant/cfe/core/libpromises/expand.c:215
    #10 0x7fb28289c713 in ExpandPromise /home/vagrant/cfe/core/libpromises/expand.c:283
    #11 0x55d8be890e43 in ScheduleAgentOperations /home/vagrant/cfe/core/cf-agent/cf-agent.c:1431
    #12 0x55d8be890656 in KeepPromiseBundles /home/vagrant/cfe/core/cf-agent/cf-agent.c:1344
    #13 0x55d8be88d870 in KeepPromises /home/vagrant/cfe/core/cf-agent/cf-agent.c:831
    #14 0x55d8be88b25b in main /home/vagrant/cfe/core/cf-agent/cf-agent.c:279
    #15 0x7fb281af0b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
```

Changelog: None
Signed-off-by: Ole Herman Schumacher Elgesem <ole@northern.tech>
oleorhagen pushed a commit to oleorhagen/core that referenced this pull request Feb 18, 2020
An empty rlist is represented as a NULL pointer, so all Rlist
functions should handle NULL pointers at runtime.

Fixes an issue on FreeBSD, where RlistContainsString is
called on a NULL pointer (before any elements are added):

    Core was generated by `/var/cfengine/bin/cf-key'.
    Program terminated with signal SIGABRT, Aborted.
    #0  0x00000008024219ba in thr_kill () from /lib/libc.so.7
    (gdb) bt
    #0  0x00000008024219ba in thr_kill () from /lib/libc.so.7
    cfengine#1  0x0000000802421984 in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:52
    cfengine#2  0x00000008024218f9 in abort () at /usr/src/lib/libc/stdlib/abort.c:65
    cfengine#3  0x000000080249d101 in __assert (func=<optimized out>, file=<optimized out>, line=<optimized out>, failedexpr=<optimized out>)
        at /usr/src/lib/libc/gen/assert.c:51
    cfengine#4  0x00000008008cc5b5 in RlistContainsString (list=0x0, string=0x8048af320 "0a:14:50:21:f0:44") at rlist.c:292
    #5  0x00000008009163e1 in FindV6InterfacesInfo (ctx=0x80481c0c0, interfaces=0x7ffffffed098, hardware=0x7ffffffed090, ips=0x7ffffffed080)
        at unix_iface.c:704
    cfengine#6  0x0000000800915f16 in GetInterfacesInfo (ctx=0x80481c0c0) at unix_iface.c:565
    cfengine#7  0x00000008009142eb in DetectEnvironment (ctx=0x80481c0c0) at sysinfo.c:3304
    cfengine#8  0x00000008008ab30f in GenericAgentDiscoverContext (ctx=0x80481c0c0, config=0x80481c000) at generic_agent.c:537
    #9  0x000000000040231b in main (argc=1, argv=0x7fffffffeaa8) at cf-key.c:148

This was introduced recently, and I don't believe it's been
in any released packages, so no changelog entry.

Signed-off-by: Ole Herman Schumacher Elgesem <ole@northern.tech>
(cherry picked from commit 6ee912c)
stweil pushed a commit to stweil/core that referenced this pull request Aug 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants