Skip to content

Commit 1aca4eb

Browse files
committed
fix: byo strdup
1 parent 998d8a4 commit 1aca4eb

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/semver.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929

3030
#include "semver.h"
3131

32+
char *semver_strdup(const char *str) {
33+
size_t n = strlen(str)+1;
34+
char *d = malloc(n);
35+
if(d) {
36+
strcpy(d,str);
37+
}
38+
return d;
39+
}
3240

3341
int semver_cmp(const char *_a, const char *_b, int *res) {
3442
semver_version a,b;
@@ -121,12 +129,12 @@ semver_version semver_version_from(unsigned long major, unsigned long minor,
121129
res->minor = minor;
122130
res->patch = patch;
123131
if (prerelease != NULL && strlen(prerelease) > 0) {
124-
res->prerelease = strdup(prerelease);
132+
res->prerelease = semver_strdup(prerelease);
125133
} else {
126134
res->prerelease = 0;
127135
}
128136
if (build != NULL && strlen(build) > 0) {
129-
res->build = strdup(build);
137+
res->build = semver_strdup(build);
130138
} else {
131139
res->build = 0;
132140
}
@@ -186,10 +194,10 @@ semver_version semver_version_from_copy(const semver_version _v) {
186194
res->build = 0;
187195

188196
if (v->prerelease != 0) {
189-
res->prerelease = strdup(v->prerelease);
197+
res->prerelease = semver_strdup(v->prerelease);
190198
}
191199
if (v->build != 0) {
192-
res->build = strdup(v->build);
200+
res->build = semver_strdup(v->build);
193201
}
194202

195203
return (semver_version)res;
@@ -363,11 +371,11 @@ int semver_version_from_string_impl(semver_version _self, const char *s) {
363371
memset(scratch, 0, sizeof(scratch));
364372
do {
365373
if (*p == 0) {
366-
self->prerelease = strdup(scratch);
374+
self->prerelease = semver_strdup(scratch);
367375
return SEMVER_OK; /* at end */
368376
}
369377
if (*p == '+') {
370-
self->prerelease = strdup(scratch);
378+
self->prerelease = semver_strdup(scratch);
371379
/* prerelease read, more to follow */
372380
break;
373381
}
@@ -388,7 +396,7 @@ int semver_version_from_string_impl(semver_version _self, const char *s) {
388396
memset(scratch, 0, sizeof(scratch));
389397
do {
390398
if (*p == 0) {
391-
self->build = strdup(scratch);
399+
self->build = semver_strdup(scratch);
392400
return SEMVER_OK;
393401
}
394402
if ((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z') ||
@@ -530,7 +538,7 @@ int semver_version_prerelease_cmp(const char *a, const char *b) {
530538

531539
/* split each string by '.' */
532540
na = count_dots(a) + 1;
533-
_a = strdup(a);
541+
_a = semver_strdup(a);
534542

535543
arr_a = (char **)calloc(na, sizeof(char *));
536544
p = _a;
@@ -549,7 +557,7 @@ int semver_version_prerelease_cmp(const char *a, const char *b) {
549557
/* -- b
550558
split each string by '.' */
551559
nb = count_dots(b) + 1;
552-
_b = strdup(b);
560+
_b = semver_strdup(b);
553561

554562
arr_b = (char **)calloc(nb, sizeof(char *));
555563
p = _b;

0 commit comments

Comments
 (0)