aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2017-12-17 15:51:49 -0500
committerFurkan Sahin <furkan-dev@proton.me>2017-12-17 15:51:49 -0500
commita427d79c013a14ce196ca8dac5644ff2c76637ca (patch)
treebaa407363899155a876ea6993ad55020059c5cfd
parentf896cb48106e704a57f93790b46fa7e183d646eb (diff)
parent0859848c24b2a32a29d988739a38e4c34b8411f9 (diff)
Merge remote-tracking branch 'besser82/bugfix/json-c' into 0.15
-rw-r--r--.travis.yml7
-rw-r--r--CMakeLists.txt11
-rw-r--r--include/sway_json_helper.h16
-rw-r--r--include/swaygrab/json.h2
-rw-r--r--sway/ipc-server.c7
-rw-r--r--swaybar/status_line.c5
-rw-r--r--swaygrab/json.c9
-rw-r--r--swaylock/main.c4
-rw-r--r--swaymsg/main.c4
9 files changed, 48 insertions, 17 deletions
diff --git a/.travis.yml b/.travis.yml
index 69634765..3eeb1682 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,11 @@ compiler:
- gcc
- clang
+env:
+ - BUILD_TYPE=Release
+ - BUILD_TYPE=Debug
+ - BUILD_TYPE=ASAN
+
arch:
packages:
- cmake
@@ -19,7 +24,7 @@ arch:
- wlc-git
- libcap
script:
- - "cmake ."
+ - "cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE ."
- "make"
script:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 99081dca..dc521570 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,17 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
add_compile_options(-Wall -Wextra -Wno-unused-parameter -Wno-unused-result -Werror)
+# Add Address Sanitiezed build type
+set(CMAKE_C_FLAGS_ASAN
+ "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer"
+ CACHE STRING "Flags used by the C compiler during address sanitizer builds."
+ FORCE )
+mark_as_advanced(
+ CMAKE_C_FLAGS_ASAN
+ CMAKE_EXE_LINKER_FLAGS_DEBUG
+ CMAKE_SHARED_LINKER_FLAGS_DEBUG
+ )
+
list(INSERT CMAKE_MODULE_PATH 0
${CMAKE_CURRENT_SOURCE_DIR}/CMake
)
diff --git a/include/sway_json_helper.h b/include/sway_json_helper.h
new file mode 100644
index 00000000..66f9cff1
--- /dev/null
+++ b/include/sway_json_helper.h
@@ -0,0 +1,16 @@
+#ifndef _SWAY_JSON_HELPER_H
+#define _SWAY_JSON_HELPER_H
+
+#include <json-c/json.h>
+
+// Macros for checking a specific version.
+#define JSON_C_VERSION_013 (13 << 8)
+
+// json-c v0.13 uses size_t for array_list_length().
+#if defined(JSON_C_VERSION_NUM) && JSON_C_VERSION_NUM >= JSON_C_VERSION_013
+typedef size_t json_ar_len_t;
+#else
+typedef int json_ar_len_t;
+#endif
+
+#endif // _SWAY_JSON_HELPER_H
diff --git a/include/swaygrab/json.h b/include/swaygrab/json.h
index c1093ef1..c0bd8587 100644
--- a/include/swaygrab/json.h
+++ b/include/swaygrab/json.h
@@ -1,4 +1,4 @@
-#include <json-c/json.h>
+#include "sway_json_helper.h"
#include "wlc/wlc.h"
void init_json_tree(int socketfd);
diff --git a/sway/ipc-server.c b/sway/ipc-server.c
index b560b930..e10445cf 100644
--- a/sway/ipc-server.c
+++ b/sway/ipc-server.c
@@ -15,7 +15,6 @@
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
-#include <json-c/json.h>
#include <list.h>
#include <libinput.h>
#ifdef __linux__
@@ -25,6 +24,7 @@ struct ucred {
gid_t gid;
};
#endif
+#include "sway_json_helper.h"
#include "sway/ipc-json.h"
#include "sway/ipc-server.h"
#include "sway/security.h"
@@ -724,7 +724,7 @@ void ipc_client_handle_command(struct ipc_client *client) {
}
// parse requested event types
- for (int i = 0; i < json_object_array_length(request); i++) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(request); i++) {
const char *event_type = json_object_get_string(json_object_array_get_idx(request, i));
if (strcmp(event_type, "workspace") == 0) {
client->subscribed_events |= event_mask(IPC_EVENT_WORKSPACE);
@@ -1126,7 +1126,8 @@ static void ipc_event_binding(json_object *sb_obj) {
sway_log(L_DEBUG, "Sending binding::run event");
json_object *obj = json_object_new_object();
json_object_object_add(obj, "change", json_object_new_string("run"));
- json_object_object_add(obj, "binding", sb_obj);
+ // sb_obj gets owned by the temporary json_object, too.
+ json_object_object_add(obj, "binding", json_object_get(sb_obj));
const char *json_string = json_object_to_json_string(obj);
ipc_send_event(json_string, IPC_EVENT_BINDING);
diff --git a/swaybar/status_line.c b/swaybar/status_line.c
index 87e90caf..e3cc0bf4 100644
--- a/swaybar/status_line.c
+++ b/swaybar/status_line.c
@@ -2,8 +2,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <json-c/json.h>
+#include "sway_json_helper.h"
#include "swaybar/config.h"
#include "swaybar/status_line.h"
#include "log.h"
@@ -70,8 +70,7 @@ static void parse_json(struct bar *bar, const char *text) {
bar->status->block_line = create_list();
- int i;
- for (i = 0; i < json_object_array_length(results); ++i) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(results); ++i) {
json_object *full_text, *short_text, *color, *min_width, *align, *urgent;
json_object *name, *instance, *separator, *separator_block_width;
json_object *background, *border, *border_top, *border_bottom;
diff --git a/swaygrab/json.c b/swaygrab/json.c
index 286085c3..f0e8fa90 100644
--- a/swaygrab/json.c
+++ b/swaygrab/json.c
@@ -50,8 +50,7 @@ static json_object *get_focused_container_r(json_object *c) {
} else {
json_object *nodes, *node, *child;
json_object_object_get_ex(c, "nodes", &nodes);
- int i;
- for (i = 0; i < json_object_array_length(nodes); i++) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(nodes); i++) {
node = json_object_array_get_idx(nodes, i);
if ((child = get_focused_container_r(node))) {
@@ -60,7 +59,7 @@ static json_object *get_focused_container_r(json_object *c) {
}
json_object_object_get_ex(c, "floating_nodes", &nodes);
- for (i = 0; i < json_object_array_length(nodes); i++) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(nodes); i++) {
node = json_object_array_get_idx(nodes, i);
if ((child = get_focused_container_r(node))) {
@@ -83,7 +82,7 @@ char *get_focused_output() {
if (!outputs) {
sway_abort("Unabled to get focused output. No nodes in tree.");
}
- for (int i = 0; i < json_object_array_length(outputs); i++) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(outputs); i++) {
output = json_object_array_get_idx(outputs, i);
if (get_focused_container_r(output)) {
@@ -131,7 +130,7 @@ json_object *get_output_container(const char *output) {
json_object *outputs, *json_output, *name;
json_object_object_get_ex(tree, "nodes", &outputs);
- for (int i = 0; i < json_object_array_length(outputs); i++) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(outputs); i++) {
json_output = json_object_array_get_idx(outputs, i);
json_object_object_get_ex(json_output, "name", &name);
diff --git a/swaylock/main.c b/swaylock/main.c
index 4b486461..3208a45b 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -3,7 +3,6 @@
#include <xkbcommon/xkbcommon.h>
#include <xkbcommon/xkbcommon-names.h>
#include <security/pam_appl.h>
-#include <json-c/json.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -14,6 +13,7 @@
#include <signal.h>
#include <stdbool.h>
#include <unistd.h>
+#include "sway_json_helper.h"
#include "client/window.h"
#include "client/registry.h"
#include "client/cairo.h"
@@ -583,7 +583,7 @@ int main(int argc, char **argv) {
for (i = 0; i < registry->outputs->length; ++i) {
if (displays_paths[i * 2] != NULL) {
- for (int j = 0;; ++j) {
+ for (json_ar_len_t j = 0;; ++j) {
if (j >= json_object_array_length(json_outputs)) {
sway_log(L_ERROR, "%s is not an extant output", displays_paths[i * 2]);
exit(EXIT_FAILURE);
diff --git a/swaymsg/main.c b/swaymsg/main.c
index 2f9cfb14..0ee7c76f 100644
--- a/swaymsg/main.c
+++ b/swaymsg/main.c
@@ -9,7 +9,7 @@
#include <sys/socket.h>
#include <ctype.h>
#include <unistd.h>
-#include <json-c/json.h>
+#include "sway_json_helper.h"
#include "stringop.h"
#include "ipc-client.h"
#include "readline.h"
@@ -149,7 +149,7 @@ static void pretty_print_version(json_object *v) {
static void pretty_print_clipboard(json_object *v) {
if (success(v, true)) {
if (json_object_is_type(v, json_type_array)) {
- for (int i = 0; i < json_object_array_length(v); ++i) {
+ for (json_ar_len_t i = 0; i < json_object_array_length(v); ++i) {
json_object *o = json_object_array_get_idx(v, i);
printf("%s\n", json_object_get_string(o));
}