Repository: celix Updated Branches: refs/heads/develop 2cd57a789 -> 6f85bf3c2
CELIX-249: Fixes a bug where tmp allocated char* where assigned to endpoints. Project: http://git-wip-us.apache.org/repos/asf/celix/repo Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/38f2fe48 Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/38f2fe48 Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/38f2fe48 Branch: refs/heads/develop Commit: 38f2fe484bc77eac9d19e59fb6aeb2417b6aeed8 Parents: 2cd57a7 Author: Pepijn Noltes <[email protected]> Authored: Wed Jul 6 09:58:29 2016 +0200 Committer: Pepijn Noltes <[email protected]> Committed: Wed Jul 6 09:58:29 2016 +0200 ---------------------------------------------------------------------- .../rsa/private/src/remote_service_admin_dfi.c | 3 +- .../private/src/remote_service_admin_impl.c | 34 +++++++++++--------- .../private/src/remote_service_admin_impl.c | 3 +- 3 files changed, 23 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/celix/blob/38f2fe48/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c b/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c index 16134fe..48c2364 100644 --- a/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c +++ b/remote_services/remote_service_admin_dfi/rsa/private/src/remote_service_admin_dfi.c @@ -548,7 +548,7 @@ static celix_status_t remoteServiceAdmin_createEndpointDescription(remote_servic serviceReference_getProperty(reference, (char*) OSGI_FRAMEWORK_SERVICE_ID, &serviceId); (*endpoint)->serviceId = strtoull(serviceId, NULL, 0); (*endpoint)->frameworkUUID = (char*) properties_get(endpointProperties, (char*) OSGI_RSA_ENDPOINT_FRAMEWORK_UUID); - (*endpoint)->service = interface; + (*endpoint)->service = strndup(interface, 1024*10); (*endpoint)->properties = endpointProperties; } @@ -596,6 +596,7 @@ celix_status_t remoteServiceAdmin_destroyEndpointDescription(endpoint_descriptio celix_status_t status = CELIX_SUCCESS; properties_destroy((*description)->properties); + free((*description)->service); free(*description); return status; http://git-wip-us.apache.org/repos/asf/celix/blob/38f2fe48/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c b/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c index 75ec5d0..f73d094 100644 --- a/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c +++ b/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c @@ -399,32 +399,33 @@ celix_status_t remoteServiceAdmin_exportService(remote_service_admin_pt admin, c return CELIX_ILLEGAL_STATE; } - const char *exports = NULL; - const char *provided = NULL; - serviceReference_getProperty(reference, OSGI_RSA_SERVICE_EXPORTED_INTERFACES, &exports); - serviceReference_getProperty(reference, OSGI_FRAMEWORK_OBJECTCLASS, &provided); - - if (exports == NULL || provided == NULL) { + const char *exportsProp = NULL; + const char *providedProp = NULL; + serviceReference_getProperty(reference, OSGI_RSA_SERVICE_EXPORTED_INTERFACES, &exportsProp); + serviceReference_getProperty(reference, OSGI_FRAMEWORK_OBJECTCLASS, &providedProp); + + if (exportsProp == NULL || providedProp == NULL) { logHelper_log(admin->loghelper, OSGI_LOGSERVICE_WARNING, "RSA: No Services to export."); } else { + char *exports = strndup(exportsProp, 1024*10); + char *provided = strndup(providedProp, 1024*10); + logHelper_log(admin->loghelper, OSGI_LOGSERVICE_INFO, "RSA: Export services (%s)", exports); array_list_pt interfaces = NULL; arrayList_create(&interfaces); - char *cmpExports = strndup(exports, 1024*10); - char *providedCopy = strndup(provided, 1024*10); - if (strcmp(utils_stringTrim(cmpExports), "*") == 0) { + if (strcmp(utils_stringTrim(exports), "*") == 0) { char *save_ptr = NULL; - char *interface = strtok_r(providedCopy, ",", &save_ptr); + char *interface = strtok_r(provided, ",", &save_ptr); while (interface != NULL) { arrayList_add(interfaces, utils_stringTrim(interface)); interface = strtok_r(NULL, ",", &save_ptr); } } else { char *provided_save_ptr = NULL; - char *pinterface = strtok_r(providedCopy, ",", &provided_save_ptr); + char *pinterface = strtok_r(provided, ",", &provided_save_ptr); while (pinterface != NULL) { char *exports_save_ptr = NULL; - char *einterface = strtok_r(cmpExports, ",", &exports_save_ptr); + char *einterface = strtok_r(exports, ",", &exports_save_ptr); while (einterface != NULL) { if (strcmp(einterface, pinterface) == 0) { arrayList_add(interfaces, einterface); @@ -434,8 +435,6 @@ celix_status_t remoteServiceAdmin_exportService(remote_service_admin_pt admin, c pinterface = strtok_r(NULL, ",", &provided_save_ptr); } } - free(cmpExports); - free(providedCopy); if (arrayList_size(interfaces) != 0) { int iter = 0; @@ -457,8 +456,12 @@ celix_status_t remoteServiceAdmin_exportService(remote_service_admin_pt admin, c } arrayList_destroy(interfaces); + free(exports); + free(provided); } + + return status; } @@ -598,7 +601,7 @@ celix_status_t remoteServiceAdmin_createEndpointDescription(remote_service_admin serviceReference_getProperty(reference, (char*)OSGI_FRAMEWORK_SERVICE_ID, &serviceId); (*description)->serviceId = strtoull(serviceId, NULL, 0); (*description)->frameworkUUID = (char*)properties_get(endpointProperties, OSGI_RSA_ENDPOINT_FRAMEWORK_UUID); - (*description)->service = interface; + (*description)->service = strndup(interface, 1024*10); (*description)->properties = endpointProperties; } @@ -611,6 +614,7 @@ celix_status_t remoteServiceAdmin_destroyEndpointDescription(endpoint_descriptio celix_status_t status = CELIX_SUCCESS; properties_destroy((*description)->properties); + free((*description)->service); free(*description); return status; http://git-wip-us.apache.org/repos/asf/celix/blob/38f2fe48/remote_services/remote_service_admin_shm/private/src/remote_service_admin_impl.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_shm/private/src/remote_service_admin_impl.c b/remote_services/remote_service_admin_shm/private/src/remote_service_admin_impl.c index c760590..f090223 100644 --- a/remote_services/remote_service_admin_shm/private/src/remote_service_admin_impl.c +++ b/remote_services/remote_service_admin_shm/private/src/remote_service_admin_impl.c @@ -810,7 +810,7 @@ celix_status_t remoteServiceAdmin_createEndpointDescription(remote_service_admin serviceReference_getProperty(reference, (char*)OSGI_FRAMEWORK_SERVICE_ID, &serviceId); (*description)->serviceId = strtoull(serviceId, NULL, 0); (*description)->id = (char*)properties_get(endpointProperties, (char*) OSGI_RSA_ENDPOINT_ID); - (*description)->service = interface; + (*description)->service = strndup(interface, 1024*10); } } @@ -821,6 +821,7 @@ celix_status_t remoteServiceAdmin_destroyEndpointDescription(endpoint_descriptio celix_status_t status = CELIX_SUCCESS; properties_destroy((*description)->properties); + free((*description)->service); free(*description); return status;
