Small memory leak fix for protocol comparison
This commit is contained in:
parent
5a9ab47635
commit
09e2a2291f
6 changed files with 44 additions and 6 deletions
|
@ -41,7 +41,7 @@ int libp2p_datastore_new(struct Datastore** datastore) {
|
||||||
if (*datastore == NULL)
|
if (*datastore == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
(*datastore)->path = NULL;
|
(*datastore)->path = NULL;
|
||||||
(*datastore)->datastore_handle = NULL;
|
(*datastore)->datastore_context = NULL;
|
||||||
(*datastore)->type = NULL;
|
(*datastore)->type = NULL;
|
||||||
(*datastore)->storage_max = NULL;
|
(*datastore)->storage_max = NULL;
|
||||||
(*datastore)->gc_period = NULL;
|
(*datastore)->gc_period = NULL;
|
||||||
|
@ -67,7 +67,7 @@ int libp2p_datastore_free(struct Datastore* datastore) {
|
||||||
free(datastore->gc_period);
|
free(datastore->gc_period);
|
||||||
if (datastore->params != NULL)
|
if (datastore->params != NULL)
|
||||||
free(datastore->params);
|
free(datastore->params);
|
||||||
if (datastore->datastore_handle != NULL)
|
if (datastore->datastore_context != NULL)
|
||||||
datastore->datastore_close(datastore);
|
datastore->datastore_close(datastore);
|
||||||
free(datastore);
|
free(datastore);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct Datastore {
|
||||||
int (*datastore_cursor_close)(struct Datastore* datastore);
|
int (*datastore_cursor_close)(struct Datastore* datastore);
|
||||||
int (*datastore_cursor_get)(unsigned char** key, int* key_length, unsigned char** value, int* value_length, enum DatastoreCursorOp op, struct Datastore* datastore);
|
int (*datastore_cursor_get)(unsigned char** key, int* key_length, unsigned char** value, int* value_length, enum DatastoreCursorOp op, struct Datastore* datastore);
|
||||||
// generic connection and status variables for the datastore
|
// generic connection and status variables for the datastore
|
||||||
void* datastore_handle; // a handle to the database
|
void* datastore_context; // a handle to a context that holds connectivity information
|
||||||
};
|
};
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|
|
@ -83,4 +83,13 @@ int os_utils_is_directory(const char* file_name);
|
||||||
*/
|
*/
|
||||||
unsigned long long os_utils_gmtime();
|
unsigned long long os_utils_gmtime();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String search for platforms without it
|
||||||
|
* @haystack where to look
|
||||||
|
* @needle what you're looking for
|
||||||
|
* @len when to stop looking
|
||||||
|
* @returns a pointer to where the needle is found in the haystack or NULL if not found
|
||||||
|
*/
|
||||||
|
char *strnstr(const char *haystack, const char *needle, size_t len);
|
||||||
|
|
||||||
#endif /* utils_h */
|
#endif /* utils_h */
|
||||||
|
|
26
os/utils.c
26
os/utils.c
|
@ -191,3 +191,29 @@ unsigned long long os_utils_gmtime() {
|
||||||
struct tm *gmt = gmtime(&local);
|
struct tm *gmt = gmtime(&local);
|
||||||
return (unsigned long long)mktime(gmt);
|
return (unsigned long long)mktime(gmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String search for platforms without it
|
||||||
|
* @haystack where to look
|
||||||
|
* @needle what you're looking for
|
||||||
|
* @len when to stop looking
|
||||||
|
* @returns a pointer to where the needle is found in the haystack or NULL if not found
|
||||||
|
*/
|
||||||
|
char *strnstr(const char *haystack, const char *needle, size_t len)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
size_t needle_len;
|
||||||
|
|
||||||
|
if (0 == (needle_len = strnlen(needle, len)))
|
||||||
|
return (char *)haystack;
|
||||||
|
|
||||||
|
for (i=0; i<=(int)(len-needle_len); i++)
|
||||||
|
{
|
||||||
|
if ((haystack[0] == needle[0]) &&
|
||||||
|
(0 == strncmp(haystack, needle, needle_len)))
|
||||||
|
return (char *)haystack;
|
||||||
|
|
||||||
|
haystack++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "libp2p/crypto/encoding/base58.h"
|
#include "libp2p/crypto/encoding/base58.h"
|
||||||
#include "libp2p/net/stream.h"
|
#include "libp2p/net/stream.h"
|
||||||
|
#include "libp2p/os/utils.h"
|
||||||
#include "libp2p/routing/dht_protocol.h"
|
#include "libp2p/routing/dht_protocol.h"
|
||||||
#include "libp2p/record/message.h"
|
#include "libp2p/record/message.h"
|
||||||
#include "libp2p/utils/linked_list.h"
|
#include "libp2p/utils/linked_list.h"
|
||||||
|
@ -22,7 +23,7 @@ struct DhtContext {
|
||||||
int libp2p_routing_dht_can_handle(const uint8_t* incoming, size_t incoming_size) {
|
int libp2p_routing_dht_can_handle(const uint8_t* incoming, size_t incoming_size) {
|
||||||
if (incoming_size < 8)
|
if (incoming_size < 8)
|
||||||
return 0;
|
return 0;
|
||||||
char* result = strstr((char*)incoming, "/ipfs/kad");
|
char* result = strnstr((char*)incoming, "/ipfs/kad", incoming_size);
|
||||||
if (result != NULL && result == (char*)incoming)
|
if (result != NULL && result == (char*)incoming)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "libp2p/secio/exchange.h"
|
#include "libp2p/secio/exchange.h"
|
||||||
#include "libp2p/net/multistream.h"
|
#include "libp2p/net/multistream.h"
|
||||||
#include "libp2p/net/p2pnet.h"
|
#include "libp2p/net/p2pnet.h"
|
||||||
|
#include "libp2p/os/utils.h"
|
||||||
#include "libp2p/crypto/ephemeral.h"
|
#include "libp2p/crypto/ephemeral.h"
|
||||||
#include "libp2p/crypto/sha1.h"
|
#include "libp2p/crypto/sha1.h"
|
||||||
#include "libp2p/crypto/sha256.h"
|
#include "libp2p/crypto/sha256.h"
|
||||||
|
@ -39,10 +40,11 @@ struct SecioContext {
|
||||||
};
|
};
|
||||||
|
|
||||||
int libp2p_secio_can_handle(const uint8_t* incoming, size_t incoming_size) {
|
int libp2p_secio_can_handle(const uint8_t* incoming, size_t incoming_size) {
|
||||||
|
const char* protocol = "/secio/1.0.0";
|
||||||
// sanity checks
|
// sanity checks
|
||||||
if (incoming_size < 11)
|
if (incoming_size < 12)
|
||||||
return 0;
|
return 0;
|
||||||
char* result = strstr((char*)incoming, "/secio/1.0.0");
|
char* result = strnstr((char*)incoming, protocol, incoming_size);
|
||||||
if (result != NULL && result == (char*)incoming)
|
if (result != NULL && result == (char*)incoming)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue