Skip to content

Commit 14fe0b3

Browse files
committed
Fix out-of-bounds memory access
1 parent 4cef7f6 commit 14fe0b3

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
#include <Foundation/Foundation.h>
22
#include <dlfcn.h>
33
#include <libgen.h>
4+
#include <limits.h>
45

56
@protocol FooProtocol
6-
+ (void)f;
7+
- (void)f;
78
@end
89

910
int main(int argc, const char **argv) {
10-
char dylib[4096];
11-
strlcpy(dylib, dirname(argv[0]), 4096);
12-
strlcat(dylib, "/libNewerTarget.dylib", 4096);
11+
char dylib[PATH_MAX];
12+
strlcpy(dylib, dirname(argv[0]), PATH_MAX);
13+
strlcat(dylib, "/libNewerTarget.dylib", PATH_MAX);
1314
dlopen(dylib, RTLD_LAZY);
1415
Class<FooProtocol> fooClass = NSClassFromString(@"NewerTarget.Foo");
1516
[[[fooClass alloc] init] f];
1617
return 0;
1718
}
18-

lldb/test/API/lang/swift/late_dylib_clangdeps/loader.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#include <dlfcn.h>
2+
#include <libgen.h>
3+
#include <limits.h>
24
#include <stdio.h>
35
#include <string.h>
4-
#include <libgen.h>
56

67
int main(int argc, const char **argv) {
7-
char *dylib_name = strcat(dirname(argv[0]),"/dylib.dylib");
8+
char dylib_name[PATH_MAX];
9+
strlcpy(dylib_name, dirname(argv[0]), PATH_MAX);
10+
strlcat(dylib_name, "/dylib.dylib", PATH_MAX);
811
void *dylib = dlopen(dylib_name, RTLD_NOW);
912
void (*f)() = dlsym(dylib, "f");
1013
f();

lldb/test/API/lang/swift/unit-tests/xctest.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
#include <dlfcn.h>
14+
#include <libgen.h>
15+
#include <limits.h>
1416
#include <stdio.h>
1517
#include <string.h>
16-
#include <libgen.h>
1718

18-
int main(int argc, const char **argv)
19-
{
20-
char *dylib = strcat(dirname(argv[0]),"/UnitTest.xctest/Contents/MacOS/test");
19+
int main(int argc, const char **argv) {
20+
char dylib[PATH_MAX];
21+
strlcpy(dylib, dirname(argv[0]), PATH_MAX);
22+
strlcat(dylib, "/UnitTest.xctest/Contents/MacOS/test", PATH_MAX);
2123
void *test_case = dlopen(dylib, RTLD_NOW);
2224

2325
printf("%p\n", test_case); // Set breakpoint here

0 commit comments

Comments
 (0)