summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2022-02-05 09:42:31 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2022-02-05 09:42:31 -0800
commit66775d210960f82ff0d4f69480df51bf44ea718b (patch)
tree994a0bd5ec8d6107ca290f56f5248882aa69e341 /compat
parentMerge branch 'rs/apply-symlinks-use-strset' (diff)
parentstable-qsort: avoid using potentially unaligned access (diff)
downloadtgif-66775d210960f82ff0d4f69480df51bf44ea718b.tar.xz
Merge branch 'jc/qsort-s-alignment-fix'
Fix a hand-rolled alloca() imitation that may have violated alignment requirement of data being sorted in compatibility implementation of qsort_s() and stable qsort(). * jc/qsort-s-alignment-fix: stable-qsort: avoid using potentially unaligned access compat/qsort_s.c: avoid using potentially unaligned access
Diffstat (limited to 'compat')
-rw-r--r--compat/qsort_s.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/compat/qsort_s.c b/compat/qsort_s.c
index 52d1f0a73d..0f7ff30f5f 100644
--- a/compat/qsort_s.c
+++ b/compat/qsort_s.c
@@ -49,21 +49,15 @@ int git_qsort_s(void *b, size_t n, size_t s,
int (*cmp)(const void *, const void *, void *), void *ctx)
{
const size_t size = st_mult(n, s);
- char buf[1024];
+ char *tmp;
if (!n)
return 0;
if (!b || !cmp)
return -1;
- if (size < sizeof(buf)) {
- /* The temporary array fits on the small on-stack buffer. */
- msort_with_tmp(b, n, s, cmp, buf, ctx);
- } else {
- /* It's somewhat large, so malloc it. */
- char *tmp = xmalloc(size);
- msort_with_tmp(b, n, s, cmp, tmp, ctx);
- free(tmp);
- }
+ tmp = xmalloc(size);
+ msort_with_tmp(b, n, s, cmp, tmp, ctx);
+ free(tmp);
return 0;
}