Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
c5448501
Unverified
Commit
c5448501
authored
Jun 25, 2019
by
Edward Thomson
Committed by
GitHub
Jun 25, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5078 from libgit2/ethomson/warnings
Remove warnings
parents
a064920e
e61b92e0
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
307 additions
and
193 deletions
+307
-193
CMakeLists.txt
+15
-3
cmake/Modules/EnableWarnings.cmake
+5
-1
deps/http-parser/http_parser.c
+11
-5
deps/zlib/adler32.c
+0
-7
deps/zlib/crc32.c
+0
-7
include/git2/tree.h
+1
-1
src/CMakeLists.txt
+8
-0
src/attrcache.c
+1
-1
src/commit_list.c
+1
-1
src/config_parse.c
+6
-1
src/fileops.c
+1
-3
src/idxmap.c
+4
-2
src/index.c
+6
-1
src/merge.c
+1
-1
src/netops.c
+6
-3
src/odb_loose.c
+14
-7
src/patch_parse.c
+1
-1
src/path.c
+14
-2
src/pool.c
+26
-22
src/pool.h
+7
-7
src/rebase.c
+2
-1
src/repository.c
+2
-1
src/sortedcache.c
+1
-1
src/trailer.c
+41
-32
src/transports/local.c
+3
-3
src/transports/smart.c
+3
-3
src/transports/smart_protocol.c
+16
-2
src/transports/winhttp.c
+16
-1
src/tree-cache.c
+14
-7
src/tree.c
+1
-1
src/util.c
+7
-7
src/wildmatch.c
+1
-1
src/win32/path_w32.c
+12
-2
src/win32/thread.c
+5
-5
src/win32/w32_buffer.c
+7
-3
src/win32/w32_stack.c
+0
-5
src/win32/w32_util.c
+31
-0
src/win32/w32_util.h
+5
-31
src/worktree.c
+1
-1
tests/clar.c
+1
-1
tests/core/link.c
+2
-2
tests/object/tree/read.c
+2
-1
tests/online/fetchhead.c
+5
-5
tests/worktree/worktree.c
+1
-1
No files found.
CMakeLists.txt
View file @
c5448501
...
...
@@ -239,10 +239,22 @@ ELSE ()
ENABLE_WARNINGS
(
shift-count-overflow
)
ENABLE_WARNINGS
(
unused-const-variable
)
ENABLE_WARNINGS
(
unused-function
)
ENABLE_WARNINGS
(
format
)
ENABLE_WARNINGS
(
format-security
)
ENABLE_WARNINGS
(
int-conversion
)
DISABLE_WARNINGS
(
documentation-deprecated-sync
)
# MinGW uses gcc, which expects POSIX formatting for printf, but
# uses the Windows C library, which uses its own format specifiers.
# Disable format specifier warnings.
IF
(
MINGW
)
DISABLE_WARNINGS
(
format
)
DISABLE_WARNINGS
(
format-security
)
ELSE
()
ENABLE_WARNINGS
(
format
)
ENABLE_WARNINGS
(
format-security
)
ENDIF
()
IF
(
"
${
CMAKE_C_COMPILER_ID
}
"
STREQUAL
"Clang"
)
DISABLE_WARNINGS
(
documentation-deprecated-sync
)
ENDIF
()
IF
(
PROFILE
)
SET
(
CMAKE_C_FLAGS
"-pg
${
CMAKE_C_FLAGS
}
"
)
...
...
cmake/Modules/EnableWarnings.cmake
View file @
c5448501
...
...
@@ -7,5 +7,9 @@ MACRO(DISABLE_WARNINGS flag)
ENDMACRO
()
IF
(
ENABLE_WERROR
)
ADD_C_FLAG_IF_SUPPORTED
(
-Werror
)
IF
(
MSVC
)
ADD_COMPILE_OPTIONS
(
-WX
)
ELSE
()
ADD_C_FLAG_IF_SUPPORTED
(
-Werror
)
ENDIF
()
ENDIF
()
deps/http-parser/http_parser.c
View file @
c5448501
...
...
@@ -1992,6 +1992,9 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) {
const
char
*
p
;
size_t
buflen
=
u
->
field_data
[
UF_HOST
].
off
+
u
->
field_data
[
UF_HOST
].
len
;
if
(
buflen
>
UINT16_MAX
)
return
1
;
u
->
field_data
[
UF_HOST
].
len
=
0
;
s
=
found_at
?
s_http_userinfo_start
:
s_http_host_start
;
...
...
@@ -2006,21 +2009,21 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) {
switch
(
new_s
)
{
case
s_http_host
:
if
(
s
!=
s_http_host
)
{
u
->
field_data
[
UF_HOST
].
off
=
p
-
buf
;
u
->
field_data
[
UF_HOST
].
off
=
(
uint16_t
)(
p
-
buf
)
;
}
u
->
field_data
[
UF_HOST
].
len
++
;
break
;
case
s_http_host_v6
:
if
(
s
!=
s_http_host_v6
)
{
u
->
field_data
[
UF_HOST
].
off
=
p
-
buf
;
u
->
field_data
[
UF_HOST
].
off
=
(
uint16_t
)(
p
-
buf
)
;
}
u
->
field_data
[
UF_HOST
].
len
++
;
break
;
case
s_http_host_port
:
if
(
s
!=
s_http_host_port
)
{
u
->
field_data
[
UF_PORT
].
off
=
p
-
buf
;
u
->
field_data
[
UF_PORT
].
off
=
(
uint16_t
)(
p
-
buf
)
;
u
->
field_data
[
UF_PORT
].
len
=
0
;
u
->
field_set
|=
(
1
<<
UF_PORT
);
}
...
...
@@ -2029,7 +2032,7 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) {
case
s_http_userinfo
:
if
(
s
!=
s_http_userinfo
)
{
u
->
field_data
[
UF_USERINFO
].
off
=
p
-
buf
;
u
->
field_data
[
UF_USERINFO
].
off
=
(
uint16_t
)(
p
-
buf
)
;
u
->
field_data
[
UF_USERINFO
].
len
=
0
;
u
->
field_set
|=
(
1
<<
UF_USERINFO
);
}
...
...
@@ -2066,6 +2069,9 @@ http_parser_parse_url(const char *buf, size_t buflen, int is_connect,
enum
http_parser_url_fields
uf
,
old_uf
;
int
found_at
=
0
;
if
(
buflen
>
UINT16_MAX
)
return
1
;
u
->
port
=
u
->
field_set
=
0
;
s
=
is_connect
?
s_req_server_start
:
s_req_spaces_before_url
;
uf
=
old_uf
=
UF_MAX
;
...
...
@@ -2121,7 +2127,7 @@ http_parser_parse_url(const char *buf, size_t buflen, int is_connect,
continue
;
}
u
->
field_data
[
uf
].
off
=
p
-
buf
;
u
->
field_data
[
uf
].
off
=
(
uint16_t
)(
p
-
buf
)
;
u
->
field_data
[
uf
].
len
=
1
;
u
->
field_set
|=
(
1
<<
uf
);
...
...
deps/zlib/adler32.c
View file @
c5448501
...
...
@@ -177,10 +177,3 @@ uLong ZEXPORT adler32_combine(adler1, adler2, len2)
return
adler32_combine_
(
adler1
,
adler2
,
len2
);
}
uLong
ZEXPORT
adler32_combine64
(
adler1
,
adler2
,
len2
)
uLong
adler1
;
uLong
adler2
;
z_off64_t
len2
;
{
return
adler32_combine_
(
adler1
,
adler2
,
len2
);
}
deps/zlib/crc32.c
View file @
c5448501
...
...
@@ -433,10 +433,3 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2)
return
crc32_combine_
(
crc1
,
crc2
,
len2
);
}
uLong
ZEXPORT
crc32_combine64
(
crc1
,
crc2
,
len2
)
uLong
crc1
;
uLong
crc2
;
z_off64_t
len2
;
{
return
crc32_combine_
(
crc1
,
crc2
,
len2
);
}
include/git2/tree.h
View file @
c5448501
...
...
@@ -267,7 +267,7 @@ GIT_EXTERN(void) git_treebuilder_clear(git_treebuilder *bld);
* @param bld a previously loaded treebuilder.
* @return the number of entries in the treebuilder
*/
GIT_EXTERN
(
unsigned
in
t
)
git_treebuilder_entrycount
(
git_treebuilder
*
bld
);
GIT_EXTERN
(
size_
t
)
git_treebuilder_entrycount
(
git_treebuilder
*
bld
);
/**
* Free a tree builder
...
...
src/CMakeLists.txt
View file @
c5448501
...
...
@@ -314,12 +314,20 @@ ELSE()
ENDIF
()
FILE
(
GLOB SRC_OS unix/*.c unix/*.h
)
ENDIF
()
FILE
(
GLOB SRC_GIT2 *.c *.h
allocators/*.c allocators/*.h
streams/*.c streams/*.h
transports/*.c transports/*.h
xdiff/*.c xdiff/*.h
)
# the xdiff dependency is not (yet) warning-free, disable warnings as
# errors for the xdiff sources until we've sorted them out
IF
(
MSVC
)
SET_SOURCE_FILES_PROPERTIES
(
xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS -WX-
)
SET_SOURCE_FILES_PROPERTIES
(
xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-
)
ENDIF
()
# Determine architecture of the machine
IF
(
CMAKE_SIZEOF_VOID_P EQUAL 8
)
SET
(
GIT_ARCH_64 1
)
...
...
src/attrcache.c
View file @
c5448501
...
...
@@ -54,7 +54,7 @@ int git_attr_cache__alloc_file_entry(
cachesize
++
;
}
ce
=
git_pool_mallocz
(
pool
,
(
uint32_t
)
cachesize
);
ce
=
git_pool_mallocz
(
pool
,
cachesize
);
GIT_ERROR_CHECK_ALLOC
(
ce
);
if
(
baselen
)
{
...
...
src/commit_list.c
View file @
c5448501
...
...
@@ -73,7 +73,7 @@ static git_commit_list_node **alloc_parents(
return
(
git_commit_list_node
**
)((
char
*
)
commit
+
sizeof
(
git_commit_list_node
));
return
(
git_commit_list_node
**
)
git_pool_malloc
(
&
walk
->
commit_pool
,
(
uint32_t
)(
n_parents
*
sizeof
(
git_commit_list_node
*
)));
&
walk
->
commit_pool
,
(
n_parents
*
sizeof
(
git_commit_list_node
*
)));
}
...
...
src/config_parse.c
View file @
c5448501
...
...
@@ -88,6 +88,11 @@ static int parse_subsection_header(git_config_parser *reader, const char *line,
last_quote
=
strrchr
(
line
,
'"'
);
quoted_len
=
last_quote
-
first_quote
;
if
((
last_quote
-
line
)
>
INT_MAX
)
{
set_parse_error
(
reader
,
0
,
"invalid section header, line too long"
);
goto
end_error
;
}
if
(
quoted_len
==
0
)
{
set_parse_error
(
reader
,
0
,
"missing closing quotation mark in section header"
);
goto
end_error
;
...
...
@@ -146,7 +151,7 @@ end_parse:
}
*
section_name
=
git_buf_detach
(
&
buf
);
return
&
line
[
rpos
+
2
]
-
line_start
;
/* rpos is at the closing quote */
return
(
int
)(
&
line
[
rpos
+
2
]
-
line_start
)
;
/* rpos is at the closing quote */
end_error
:
git_buf_dispose
(
&
buf
);
...
...
src/fileops.c
View file @
c5448501
...
...
@@ -636,9 +636,7 @@ retry_lstat:
size_t
alloc_size
;
GIT_ERROR_CHECK_ALLOC_ADD
(
&
alloc_size
,
make_path
.
size
,
1
);
if
(
!
git__is_uint32
(
alloc_size
))
return
-
1
;
cache_path
=
git_pool_malloc
(
opts
->
pool
,
(
uint32_t
)
alloc_size
);
cache_path
=
git_pool_malloc
(
opts
->
pool
,
alloc_size
);
GIT_ERROR_CHECK_ALLOC
(
cache_path
);
memcpy
(
cache_path
,
make_path
.
ptr
,
make_path
.
size
+
1
);
...
...
src/idxmap.c
View file @
c5448501
...
...
@@ -70,7 +70,8 @@ void git_idxmap_icase_clear(git_idxmap_icase *map)
int
git_idxmap_resize
(
git_idxmap
*
map
,
size_t
size
)
{
if
(
kh_resize
(
idx
,
map
,
size
)
<
0
)
{
if
(
!
git__is_uint32
(
size
)
||
kh_resize
(
idx
,
map
,
(
khiter_t
)
size
)
<
0
)
{
git_error_set_oom
();
return
-
1
;
}
...
...
@@ -79,7 +80,8 @@ int git_idxmap_resize(git_idxmap *map, size_t size)
int
git_idxmap_icase_resize
(
git_idxmap_icase
*
map
,
size_t
size
)
{
if
(
kh_resize
(
idxicase
,
map
,
size
)
<
0
)
{
if
(
!
git__is_uint32
(
size
)
||
kh_resize
(
idxicase
,
map
,
(
khiter_t
)
size
)
<
0
)
{
git_error_set_oom
();
return
-
1
;
}
...
...
src/index.c
View file @
c5448501
...
...
@@ -1474,6 +1474,11 @@ int git_index_add_from_buffer(
return
-
1
;
}
if
(
len
>
UINT32_MAX
)
{
git_error_set
(
GIT_ERROR_INDEX
,
"buffer is too large"
);
return
-
1
;
}
if
(
index_entry_dup
(
&
entry
,
index
,
source_entry
)
<
0
)
return
-
1
;
...
...
@@ -1484,7 +1489,7 @@ int git_index_add_from_buffer(
}
git_oid_cpy
(
&
entry
->
id
,
&
id
);
entry
->
file_size
=
len
;
entry
->
file_size
=
(
uint32_t
)
len
;
if
((
error
=
index_insert
(
index
,
&
entry
,
1
,
true
,
true
,
true
))
<
0
)
return
error
;
...
...
src/merge.c
View file @
c5448501
...
...
@@ -867,7 +867,7 @@ static int merge_conflict_invoke_driver(
git_oid_cpy
(
&
result
->
id
,
&
oid
);
result
->
mode
=
mode
;
result
->
file_size
=
buf
.
size
;
result
->
file_size
=
(
uint32_t
)
buf
.
size
;
result
->
path
=
git_pool_strdup
(
&
diff_list
->
pool
,
path
);
GIT_ERROR_CHECK_ALLOC
(
result
->
path
);
...
...
src/netops.c
View file @
c5448501
...
...
@@ -37,14 +37,17 @@ void gitno_buffer_setup_callback(
static
int
recv_stream
(
gitno_buffer
*
buf
)
{
git_stream
*
io
=
(
git_stream
*
)
buf
->
cb_data
;
int
ret
;
size_t
readlen
=
buf
->
len
-
buf
->
offset
;
ssize_t
ret
;
ret
=
git_stream_read
(
io
,
buf
->
data
+
buf
->
offset
,
buf
->
len
-
buf
->
offset
);
readlen
=
min
(
readlen
,
INT_MAX
);
ret
=
git_stream_read
(
io
,
buf
->
data
+
buf
->
offset
,
(
int
)
readlen
);
if
(
ret
<
0
)
return
-
1
;
buf
->
offset
+=
ret
;
return
ret
;
return
(
int
)
ret
;
}
void
gitno_buffer_setup_fromstream
(
git_stream
*
st
,
gitno_buffer
*
buf
,
char
*
data
,
size_t
len
)
...
...
src/odb_loose.c
View file @
c5448501
...
...
@@ -408,7 +408,8 @@ done:
static
int
read_header_loose
(
git_rawobj
*
out
,
git_buf
*
loc
)
{
unsigned
char
obj
[
1024
];
int
fd
,
obj_len
,
error
;
ssize_t
obj_len
;
int
fd
,
error
;
assert
(
out
&&
loc
);
...
...
@@ -417,10 +418,14 @@ static int read_header_loose(git_rawobj *out, git_buf *loc)
out
->
data
=
NULL
;
if
((
error
=
fd
=
git_futils_open_ro
(
loc
->
ptr
))
<
0
||
(
error
=
obj_len
=
p_read
(
fd
,
obj
,
sizeof
(
obj
)))
<
0
)
if
((
error
=
fd
=
git_futils_open_ro
(
loc
->
ptr
))
<
0
)
goto
done
;
if
((
obj_len
=
p_read
(
fd
,
obj
,
sizeof
(
obj
)))
<
0
)
{
error
=
(
int
)
obj_len
;
goto
done
;
}
if
(
!
is_zlib_compressed_data
(
obj
,
(
size_t
)
obj_len
))
error
=
read_header_loose_packlike
(
out
,
obj
,
(
size_t
)
obj_len
);
else
...
...
@@ -871,6 +876,8 @@ static int loose_backend__readstream_read(
size_t
start_remain
=
stream
->
start_len
-
stream
->
start_read
;
int
total
=
0
,
error
;
buffer_len
=
min
(
buffer_len
,
INT_MAX
);
/*
* if we read more than just the header in the initial read, play
* that back for the caller.
...
...
@@ -882,20 +889,20 @@ static int loose_backend__readstream_read(
buffer
+=
chunk
;
stream
->
start_read
+=
chunk
;
total
+=
chunk
;
total
+=
(
int
)
chunk
;
buffer_len
-=
chunk
;
}
if
(
buffer_len
)
{
size_t
chunk
=
min
(
buffer_len
,
INT_MAX
)
;
size_t
chunk
=
buffer_len
;
if
((
error
=
git_zstream_get_output
(
buffer
,
&
chunk
,
&
stream
->
zstream
))
<
0
)
return
error
;
total
+=
chunk
;
total
+=
(
int
)
chunk
;
}
return
total
;
return
(
int
)
total
;
}
static
void
loose_backend__readstream_free
(
git_odb_stream
*
_stream
)
...
...
src/patch_parse.c
View file @
c5448501
...
...
@@ -33,7 +33,7 @@ typedef struct {
char
*
old_prefix
,
*
new_prefix
;
}
git_patch_parsed
;
static
in
t
header_path_len
(
git_patch_parse_ctx
*
ctx
)
static
size_
t
header_path_len
(
git_patch_parse_ctx
*
ctx
)
{
bool
inquote
=
0
;
bool
quoted
=
git_parse_ctx_contains_s
(
&
ctx
->
parse_ctx
,
"
\"
"
);
...
...
src/path.c
View file @
c5448501
...
...
@@ -160,7 +160,13 @@ int git_path_dirname_r(git_buf *buffer, const char *path)
while
(
endp
>
path
&&
*
endp
==
'/'
)
endp
--
;
if
((
len
=
win32_prefix_length
(
path
,
endp
-
path
+
1
))
>
0
)
{
if
(
endp
-
path
+
1
>
INT_MAX
)
{
git_error_set
(
GIT_ERROR_INVALID
,
"path too long"
);
len
=
-
1
;
goto
Exit
;
}
if
((
len
=
win32_prefix_length
(
path
,
(
int
)(
endp
-
path
+
1
)))
>
0
)
{
is_prefix
=
1
;
goto
Exit
;
}
...
...
@@ -180,7 +186,13 @@ int git_path_dirname_r(git_buf *buffer, const char *path)
endp
--
;
}
while
(
endp
>
path
&&
*
endp
==
'/'
);
if
((
len
=
win32_prefix_length
(
path
,
endp
-
path
+
1
))
>
0
)
{
if
(
endp
-
path
+
1
>
INT_MAX
)
{
git_error_set
(
GIT_ERROR_INVALID
,
"path too long"
);
len
=
-
1
;
goto
Exit
;
}
if
((
len
=
win32_prefix_length
(
path
,
(
int
)(
endp
-
path
+
1
)))
>
0
)
{
is_prefix
=
1
;
goto
Exit
;
}
...
...
src/pool.c
View file @
c5448501
...
...
@@ -14,30 +14,30 @@
struct
git_pool_page
{
git_pool_page
*
next
;
uint32
_t
size
;
uint32
_t
avail
;
size
_t
size
;
size
_t
avail
;
GIT_ALIGN
(
char
data
[
GIT_FLEX_ARRAY
],
8
);
};
static
void
*
pool_alloc_page
(
git_pool
*
pool
,
uint32
_t
size
);
static
void
*
pool_alloc_page
(
git_pool
*
pool
,
size
_t
size
);
uint32
_t
git_pool__system_page_size
(
void
)
size
_t
git_pool__system_page_size
(
void
)
{
static
uint32
_t
size
=
0
;
static
size
_t
size
=
0
;
if
(
!
size
)
{
size_t
page_size
;
if
(
git__page_size
(
&
page_size
)
<
0
)
page_size
=
4096
;
/* allow space for malloc overhead */
size
=
page_size
-
(
2
*
sizeof
(
void
*
))
-
sizeof
(
git_pool_page
);
size
=
(
page_size
-
(
2
*
sizeof
(
void
*
))
-
sizeof
(
git_pool_page
)
);
}
return
size
;
}
#ifndef GIT_DEBUG_POOL
void
git_pool_init
(
git_pool
*
pool
,
uint32
_t
item_size
)
void
git_pool_init
(
git_pool
*
pool
,
size
_t
item_size
)
{
assert
(
pool
);
assert
(
item_size
>=
1
);
...
...
@@ -59,10 +59,10 @@ void git_pool_clear(git_pool *pool)
pool
->
pages
=
NULL
;
}
static
void
*
pool_alloc_page
(
git_pool
*
pool
,
uint32
_t
size
)
static
void
*
pool_alloc_page
(
git_pool
*
pool
,
size
_t
size
)
{
git_pool_page
*
page
;
const
uint32
_t
new_page_size
=
(
size
<=
pool
->
page_size
)
?
pool
->
page_size
:
size
;
const
size
_t
new_page_size
=
(
size
<=
pool
->
page_size
)
?
pool
->
page_size
:
size
;
size_t
alloc_size
;
if
(
GIT_ADD_SIZET_OVERFLOW
(
&
alloc_size
,
new_page_size
,
sizeof
(
git_pool_page
))
||
...
...
@@ -78,7 +78,7 @@ static void *pool_alloc_page(git_pool *pool, uint32_t size)
return
page
->
data
;
}
static
void
*
pool_alloc
(
git_pool
*
pool
,
uint32
_t
size
)
static
void
*
pool_alloc
(
git_pool
*
pool
,
size
_t
size
)
{
git_pool_page
*
page
=
pool
->
pages
;
void
*
ptr
=
NULL
;
...
...
@@ -125,7 +125,7 @@ static int git_pool__ptr_cmp(const void * a, const void * b)
}
}
void
git_pool_init
(
git_pool
*
pool
,
uint32
_t
item_size
)
void
git_pool_init
(
git_pool
*
pool
,
size
_t
item_size
)
{
assert
(
pool
);
assert
(
item_size
>=
1
);
...
...
@@ -141,7 +141,7 @@ void git_pool_clear(git_pool *pool)
git_vector_free_deep
(
&
pool
->
allocations
);
}
static
void
*
pool_alloc
(
git_pool
*
pool
,
uint32
_t
size
)
{
static
void
*
pool_alloc
(
git_pool
*
pool
,
size
_t
size
)
{
void
*
ptr
=
NULL
;
if
((
ptr
=
git__malloc
(
size
))
==
NULL
)
{
return
NULL
;
...
...
@@ -169,26 +169,26 @@ void git_pool_swap(git_pool *a, git_pool *b)
memcpy
(
b
,
&
temp
,
sizeof
(
temp
));
}
static
uint32_t
alloc_size
(
git_pool
*
pool
,
uint32
_t
count
)
static
size_t
alloc_size
(
git_pool
*
pool
,
size
_t
count
)
{
const
uint32
_t
align
=
sizeof
(
void
*
)
-
1
;
const
size
_t
align
=
sizeof
(
void
*
)
-
1
;
if
(
pool
->
item_size
>
1
)
{
const
uint32
_t
item_size
=
(
pool
->
item_size
+
align
)
&
~
align
;
const
size
_t
item_size
=
(
pool
->
item_size
+
align
)
&
~
align
;
return
item_size
*
count
;
}
return
(
count
+
align
)
&
~
align
;
}
void
*
git_pool_malloc
(
git_pool
*
pool
,
uint32
_t
items
)
void
*
git_pool_malloc
(
git_pool
*
pool
,
size
_t
items
)
{
return
pool_alloc
(
pool
,
alloc_size
(
pool
,
items
));
}
void
*
git_pool_mallocz
(
git_pool
*
pool
,
uint32
_t
items
)
void
*
git_pool_mallocz
(
git_pool
*
pool
,
size
_t
items
)
{
const
uint32
_t
size
=
alloc_size
(
pool
,
items
);
const
size
_t
size
=
alloc_size
(
pool
,
items
);
void
*
ptr
=
pool_alloc
(
pool
,
size
);
if
(
ptr
)
memset
(
ptr
,
0x0
,
size
);
...
...
@@ -201,10 +201,10 @@ char *git_pool_strndup(git_pool *pool, const char *str, size_t n)
assert
(
pool
&&
str
&&
pool
->
item_size
==
sizeof
(
char
));
if
(
(
uint32_t
)(
n
+
1
)
<
n
)
if
(
n
==
SIZE_MAX
)
return
NULL
;
if
((
ptr
=
git_pool_malloc
(
pool
,
(
uint32_t
)(
n
+
1
)))
!=
NULL
)
{
if
((
ptr
=
git_pool_malloc
(
pool
,
(
n
+
1
)))
!=
NULL
)
{
memcpy
(
ptr
,
str
,
n
);
ptr
[
n
]
=
'\0'
;
}
...
...
@@ -226,14 +226,18 @@ char *git_pool_strdup_safe(git_pool *pool, const char *str)
char
*
git_pool_strcat
(
git_pool
*
pool
,
const
char
*
a
,
const
char
*
b
)
{
void
*
ptr
;
size_t
len_a
,
len_b
;
size_t
len_a
,
len_b
,
total
;
assert
(
pool
&&
pool
->
item_size
==
sizeof
(
char
));
len_a
=
a
?
strlen
(
a
)
:
0
;
len_b
=
b
?
strlen
(
b
)
:
0
;
if
((
ptr
=
git_pool_malloc
(
pool
,
(
uint32_t
)(
len_a
+
len_b
+
1
)))
!=
NULL
)
{
if
(
GIT_ADD_SIZET_OVERFLOW
(
&
total
,
len_a
,
len_b
)
||
GIT_ADD_SIZET_OVERFLOW
(
&
total
,
total
,
1
))
return
NULL
;
if
((
ptr
=
git_pool_malloc
(
pool
,
total
))
!=
NULL
)
{
if
(
len_a
)
memcpy
(
ptr
,
a
,
len_a
);
if
(
len_b
)
...
...
src/pool.h
View file @
c5448501
...
...
@@ -32,8 +32,8 @@ typedef struct git_pool_page git_pool_page;
*/
typedef
struct
{
git_pool_page
*
pages
;
/* allocated pages */
uint32
_t
item_size
;
/* size of single alloc unit in bytes */
uint32
_t
page_size
;
/* size of page in bytes */
size
_t
item_size
;
/* size of single alloc unit in bytes */
size
_t
page_size
;
/* size of page in bytes */
}
git_pool
;
#define GIT_POOL_INIT { NULL, 0, 0 }
...
...
@@ -57,8 +57,8 @@ typedef struct {
*/
typedef
struct
{
git_vector
allocations
;
uint32
_t
item_size
;
uint32
_t
page_size
;
size
_t
item_size
;
size
_t
page_size
;
}
git_pool
;
#define GIT_POOL_INIT { GIT_VECTOR_INIT, 0, 0 }
...
...
@@ -81,7 +81,7 @@ typedef struct {
* Of course, you can use this in other ways, but those are the
* two most common patterns.
*/
extern
void
git_pool_init
(
git_pool
*
pool
,
uint32
_t
item_size
);
extern
void
git_pool_init
(
git_pool
*
pool
,
size
_t
item_size
);
/**
* Free all items in pool
...
...
@@ -96,8 +96,8 @@ extern void git_pool_swap(git_pool *a, git_pool *b);
/**
* Allocate space for one or more items from a pool.
*/
extern
void
*
git_pool_malloc
(
git_pool
*
pool
,
uint32
_t
items
);
extern
void
*
git_pool_mallocz
(
git_pool
*
pool
,
uint32
_t
items
);
extern
void
*
git_pool_malloc
(
git_pool
*
pool
,
size
_t
items
);
extern
void
*
git_pool_mallocz
(
git_pool
*
pool
,
size
_t
items
);
/**
* Allocate space and duplicate string data into it.
...
...
src/rebase.c
View file @
c5448501
...
...
@@ -298,7 +298,8 @@ int git_rebase_open(
git_rebase
*
rebase
;
git_buf
path
=
GIT_BUF_INIT
,
orig_head_name
=
GIT_BUF_INIT
,
orig_head_id
=
GIT_BUF_INIT
,
onto_id
=
GIT_BUF_INIT
;
int
state_path_len
,
error
;
size_t
state_path_len
;
int
error
;
assert
(
repo
);
...
...
src/repository.c
View file @
c5448501
...
...
@@ -878,7 +878,8 @@ int git_repository_open_from_worktree(git_repository **repo_out, git_worktree *w
{
git_buf
path
=
GIT_BUF_INIT
;
git_repository
*
repo
=
NULL
;
int
len
,
err
;
size_t
len
;
int
err
;
assert
(
repo_out
&&
wt
);
...
...
src/sortedcache.c
View file @
c5448501
...
...
@@ -282,7 +282,7 @@ int git_sortedcache_upsert(void **out, git_sortedcache *sc, const char *key)
itemlen
=
sc
->
item_path_offset
+
keylen
+
1
;
itemlen
=
(
itemlen
+
7
)
&
~
7
;
if
((
item
=
git_pool_mallocz
(
&
sc
->
pool
,
(
uint32_t
)
itemlen
))
==
NULL
)
{
if
((
item
=
git_pool_mallocz
(
&
sc
->
pool
,
itemlen
))
==
NULL
)
{
/* don't use GIT_ERROR_CHECK_ALLOC b/c of lock */
error
=
-
1
;
goto
done
;
...
...
src/trailer.c
View file @
c5448501
...
...
@@ -42,15 +42,19 @@ static const char *next_line(const char *str)
}
/*
* Return the position of the start of the last line. If len is 0, return
-1
.
* Return the position of the start of the last line. If len is 0, return
0
.
*/
static
int
last_line
(
const
char
*
buf
,
size_t
len
)
static
bool
last_line
(
size_t
*
out
,
const
char
*
buf
,
size_t
len
)
{
int
i
;
size_t
i
;
*
out
=
0
;
if
(
len
==
0
)
return
-
1
;
return
false
;
if
(
len
==
1
)
return
0
;
return
true
;
/*
* Skip the last character (in addition to the null terminator),
* because if the last character is a newline, it is considered as part
...
...
@@ -58,31 +62,37 @@ static int last_line(const char *buf, size_t len)
*/
i
=
len
-
2
;
for
(;
i
>=
0
;
i
--
)
{
if
(
buf
[
i
]
==
'\n'
)
return
i
+
1
;
for
(;
i
>
0
;
i
--
)
{
if
(
buf
[
i
]
==
'\n'
)
{
*
out
=
i
+
1
;
return
true
;
}
}
return
0
;
return
true
;
}
/*
* If the given line is of the form
* "<token><optional whitespace><separator>..." or "<separator>...",
return the
*
location of the separator. Otherwise, return -1. The optional whitespace
*
is allowed there primarily to allow things like "Bug #43" where <token> i
s
* "Bug" and <separator> is "#".
* "<token><optional whitespace><separator>..." or "<separator>...",
sets out
*
to the location of the separator and returns true. Otherwise, returns
*
false. The optional whitespace is allowed there primarily to allow thing
s
*
like "Bug #43" where <token> is
"Bug" and <separator> is "#".
*
* The separator-starts-line case (in which this function returns 0) is
* distinguished from the non-well-formed-line case (in which this function
* returns -1) because some callers of this function need such a distinction.
* The separator-starts-line case (in which this function returns true and
* sets out to 0) is distinguished from the non-well-formed-line case (in
* which this function returns false) because some callers of this function
* need such a distinction.
*/
static
int
find_separator
(
const
char
*
line
,
const
char
*
separators
)
static
bool
find_separator
(
size_t
*
out
,
const
char
*
line
,
const
char
*
separators
)
{
int
whitespace_found
=
0
;
const
char
*
c
;
for
(
c
=
line
;
*
c
;
c
++
)
{
if
(
strchr
(
separators
,
*
c
))
return
c
-
line
;
if
(
strchr
(
separators
,
*
c
))
{
*
out
=
c
-
line
;
return
true
;
}
if
(
!
whitespace_found
&&
(
isalnum
(
*
c
)
||
*
c
==
'-'
))
continue
;
if
(
c
!=
line
&&
(
*
c
==
' '
||
*
c
==
'\t'
))
{
...
...
@@ -91,7 +101,7 @@ static int find_separator(const char *line, const char *separators)
}
break
;
}
return
-
1
;
return
false
;
}
/*
...
...
@@ -104,10 +114,9 @@ static int find_separator(const char *line, const char *separators)
* Returns the number of bytes from the tail to ignore, to be fed as
* the second parameter to append_signoff().
*/
static
in
t
ignore_non_trailer
(
const
char
*
buf
,
size_t
len
)
static
size_
t
ignore_non_trailer
(
const
char
*
buf
,
size_t
len
)
{
int
boc
=
0
;
size_t
bol
=
0
;
size_t
boc
=
0
,
bol
=
0
;
int
in_old_conflicts_block
=
0
;
size_t
cutoff
=
len
;
...
...
@@ -144,7 +153,7 @@ static int ignore_non_trailer(const char *buf, size_t len)
* Return the position of the start of the patch or the length of str if there
* is no patch in the message.
*/
static
in
t
find_patch_start
(
const
char
*
str
)
static
size_
t
find_patch_start
(
const
char
*
str
)
{
const
char
*
s
;
...
...
@@ -160,10 +169,11 @@ static int find_patch_start(const char *str)
* Return the position of the first trailer line or len if there are no
* trailers.
*/
static
in
t
find_trailer_start
(
const
char
*
buf
,
size_t
len
)
static
size_
t
find_trailer_start
(
const
char
*
buf
,
size_t
len
)
{
const
char
*
s
;
int
end_of_title
,
l
,
only_spaces
=
1
;
size_t
end_of_title
,
l
;
int
only_spaces
=
1
;
int
recognized_prefix
=
0
,
trailer_lines
=
0
,
non_trailer_lines
=
0
;
/*
* Number of possible continuation lines encountered. This will be
...
...
@@ -189,12 +199,11 @@ static int find_trailer_start(const char *buf, size_t len)
* trailers, or (ii) contains at least one Git-generated trailer and
* consists of at least 25% trailers.
*/
for
(
l
=
last_line
(
buf
,
len
);
l
>=
end_of_title
;
l
=
last_line
(
buf
,
l
))
{
l
=
len
;
while
(
last_line
(
&
l
,
buf
,
l
)
&&
l
>=
end_of_title
)
{
const
char
*
bol
=
buf
+
l
;
const
char
*
const
*
p
;
int
separator_pos
;
size_t
separator_pos
=
0
;
if
(
bol
[
0
]
==
COMMENT_LINE_CHAR
)
{
non_trailer_lines
+=
possible_continuation_lines
;
...
...
@@ -223,7 +232,7 @@ static int find_trailer_start(const char *buf, size_t len)
}
}
separator_pos
=
find_separator
(
bol
,
TRAILER_SEPARATORS
);
find_separator
(
&
separator_pos
,
bol
,
TRAILER_SEPARATORS
);
if
(
separator_pos
>=
1
&&
!
isspace
(
bol
[
0
]))
{
trailer_lines
++
;
possible_continuation_lines
=
0
;
...
...
@@ -244,7 +253,7 @@ continue_outer_loop:
}
/* Return the position of the end of the trailers. */
static
in
t
find_trailer_end
(
const
char
*
buf
,
size_t
len
)
static
size_
t
find_trailer_end
(
const
char
*
buf
,
size_t
len
)
{
return
len
-
ignore_non_trailer
(
buf
,
len
);
}
...
...
src/transports/local.c
View file @
c5448501
...
...
@@ -501,7 +501,7 @@ static int local_counting(int stage, unsigned int current, unsigned int total, v
if
(
git_buf_oom
(
&
progress_info
))
return
-
1
;
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
);
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
(
int
)
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
);
git_buf_dispose
(
&
progress_info
);
return
error
;
...
...
@@ -588,7 +588,7 @@ static int local_download_pack(
goto
cleanup
;
if
(
t
->
progress_cb
&&
(
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
))
<
0
)
(
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
(
int
)
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
))
<
0
)
goto
cleanup
;
/* Walk the objects, building a packfile */
...
...
@@ -602,7 +602,7 @@ static int local_download_pack(
goto
cleanup
;
if
(
t
->
progress_cb
&&
(
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
))
<
0
)
(
error
=
t
->
progress_cb
(
git_buf_cstr
(
&
progress_info
),
(
int
)
git_buf_len
(
&
progress_info
),
t
->
message_cb_payload
))
<
0
)
goto
cleanup
;
if
((
error
=
git_odb_write_pack
(
&
writepack
,
odb
,
progress_cb
,
progress_payload
))
!=
0
)
...
...
src/transports/smart.c
View file @
c5448501
...
...
@@ -73,7 +73,7 @@ static int git_smart__set_callbacks(
return
0
;
}
static
in
t
http_header_name_length
(
const
char
*
http_header
)
static
size_
t
http_header_name_length
(
const
char
*
http_header
)
{
const
char
*
colon
=
strchr
(
http_header
,
':'
);
if
(
!
colon
)
...
...
@@ -84,7 +84,7 @@ static int http_header_name_length(const char *http_header)
static
bool
is_malformed_http_header
(
const
char
*
http_header
)
{
const
char
*
c
;
in
t
name_len
;
size_
t
name_len
;
/* Disallow \r and \n */
c
=
strchr
(
http_header
,
'\r'
);
...
...
@@ -114,7 +114,7 @@ static char *forbidden_custom_headers[] = {
static
bool
is_forbidden_custom_header
(
const
char
*
custom_header
)
{
unsigned
long
i
;
in
t
name_len
=
http_header_name_length
(
custom_header
);
size_
t
name_len
=
http_header_name_length
(
custom_header
);
/* Disallow headers that we set */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
forbidden_custom_headers
);
i
++
)
...
...
src/transports/smart_protocol.c
View file @
c5448501
...
...
@@ -604,7 +604,14 @@ int git_smart__download_pack(
}
else
if
(
pkt
->
type
==
GIT_PKT_PROGRESS
)
{
if
(
t
->
progress_cb
)
{
git_pkt_progress
*
p
=
(
git_pkt_progress
*
)
pkt
;
error
=
t
->
progress_cb
(
p
->
data
,
p
->
len
,
t
->
message_cb_payload
);
if
(
p
->
len
>
INT_MAX
)
{
git_error_set
(
GIT_ERROR_NET
,
"oversized progress message"
);
error
=
GIT_ERROR
;
goto
done
;
}
error
=
t
->
progress_cb
(
p
->
data
,
(
int
)
p
->
len
,
t
->
message_cb_payload
);
}
}
else
if
(
pkt
->
type
==
GIT_PKT_DATA
)
{
git_pkt_data
*
p
=
(
git_pkt_data
*
)
pkt
;
...
...
@@ -839,7 +846,14 @@ static int parse_report(transport_smart *transport, git_push *push)
case
GIT_PKT_PROGRESS
:
if
(
transport
->
progress_cb
)
{
git_pkt_progress
*
p
=
(
git_pkt_progress
*
)
pkt
;
error
=
transport
->
progress_cb
(
p
->
data
,
p
->
len
,
transport
->
message_cb_payload
);
if
(
p
->
len
>
INT_MAX
)
{
git_error_set
(
GIT_ERROR_NET
,
"oversized progress message"
);
error
=
GIT_ERROR
;
goto
done
;
}
error
=
transport
->
progress_cb
(
p
->
data
,
(
int
)
p
->
len
,
transport
->
message_cb_payload
);
}
break
;
default:
...
...
src/transports/winhttp.c
View file @
c5448501
...
...
@@ -48,6 +48,10 @@
# define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800
#endif
#ifndef DWORD_MAX
# define DWORD_MAX 0xffffffff
#endif
static
const
char
*
prefix_https
=
"https://"
;
static
const
char
*
upload_pack_service
=
"upload-pack"
;
static
const
char
*
upload_pack_ls_service_url
=
"/info/refs?service=git-upload-pack"
;
...
...
@@ -339,6 +343,8 @@ static int apply_credentials(
{
int
error
=
0
;
GIT_UNUSED
(
url
);
/* If we have creds, just apply them */
if
(
creds
&&
creds
->
credtype
==
GIT_CREDTYPE_USERPASS_PLAINTEXT
)
error
=
apply_userpass_credentials
(
request
,
target
,
mechanisms
,
creds
);
...
...
@@ -686,6 +692,10 @@ static void CALLBACK winhttp_status(
{
DWORD
status
;
GIT_UNUSED
(
connection
);
GIT_UNUSED
(
ctx
);
GIT_UNUSED
(
info_len
);
if
(
code
!=
WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
)
return
;
...
...
@@ -816,6 +826,11 @@ static int do_send_request(winhttp_stream *s, size_t len, int ignore_length)
int
attempts
;
bool
success
;
if
(
len
>
DWORD_MAX
)
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
-
1
;
}
for
(
attempts
=
0
;
attempts
<
5
;
attempts
++
)
{
if
(
ignore_length
)
{
success
=
WinHttpSendRequest
(
s
->
request
,
...
...
@@ -826,7 +841,7 @@ static int do_send_request(winhttp_stream *s, size_t len, int ignore_length)
success
=
WinHttpSendRequest
(
s
->
request
,
WINHTTP_NO_ADDITIONAL_HEADERS
,
0
,
WINHTTP_NO_REQUEST_DATA
,
0
,
len
,
0
);
(
DWORD
)
len
,
0
);
}
if
(
success
||
GetLastError
()
!=
(
DWORD
)
SEC_E_BUFFER_TOO_SMALL
)
...
...
src/tree-cache.c
View file @
c5448501
...
...
@@ -120,12 +120,14 @@ static int read_tree_internal(git_tree_cache **out,
/* Parse children: */
if
(
tree
->
children_count
>
0
)
{
unsigned
int
i
;
size_t
i
,
bufsize
;
tree
->
children
=
git_pool_malloc
(
pool
,
tree
->
children_count
*
sizeof
(
git_tree_cache
*
));
GIT_ERROR_CHECK_ALLOC_MULTIPLY
(
&
bufsize
,
tree
->
children_count
,
sizeof
(
git_tree_cache
*
));
tree
->
children
=
git_pool_malloc
(
pool
,
bufsize
);
GIT_ERROR_CHECK_ALLOC
(
tree
->
children
);
memset
(
tree
->
children
,
0x0
,
tree
->
children_count
*
sizeof
(
git_tree_cache
*
)
);
memset
(
tree
->
children
,
0x0
,
bufsize
);
for
(
i
=
0
;
i
<
tree
->
children_count
;
++
i
)
{
if
(
read_tree_internal
(
&
tree
->
children
[
i
],
&
buffer
,
buffer_end
,
pool
)
<
0
)
...
...
@@ -160,7 +162,7 @@ int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer
static
int
read_tree_recursive
(
git_tree_cache
*
cache
,
const
git_tree
*
tree
,
git_pool
*
pool
)
{
git_repository
*
repo
;
size_t
i
,
j
,
nentries
,
ntrees
;
size_t
i
,
j
,
nentries
,
ntrees
,
alloc_size
;
int
error
;
repo
=
git_tree_owner
(
tree
);
...
...
@@ -182,8 +184,10 @@ static int read_tree_recursive(git_tree_cache *cache, const git_tree *tree, git_
ntrees
++
;
}
GIT_ERROR_CHECK_ALLOC_MULTIPLY
(
&
alloc_size
,
ntrees
,
sizeof
(
git_tree_cache
*
));
cache
->
children_count
=
ntrees
;
cache
->
children
=
git_pool_mallocz
(
pool
,
ntrees
*
sizeof
(
git_tree_cache
*
)
);
cache
->
children
=
git_pool_mallocz
(
pool
,
alloc_size
);
GIT_ERROR_CHECK_ALLOC
(
cache
->
children
);
j
=
0
;
...
...
@@ -232,11 +236,14 @@ int git_tree_cache_read_tree(git_tree_cache **out, const git_tree *tree, git_poo
int
git_tree_cache_new
(
git_tree_cache
**
out
,
const
char
*
name
,
git_pool
*
pool
)
{
size_t
name_len
;
size_t
name_len
,
alloc_size
;
git_tree_cache
*
tree
;
name_len
=
strlen
(
name
);
tree
=
git_pool_malloc
(
pool
,
sizeof
(
git_tree_cache
)
+
name_len
+
1
);
GIT_ERROR_CHECK_ALLOC_ADD3
(
&
alloc_size
,
sizeof
(
git_tree_cache
),
name_len
,
1
);
tree
=
git_pool_malloc
(
pool
,
alloc_size
);
GIT_ERROR_CHECK_ALLOC
(
tree
);
memset
(
tree
,
0x0
,
sizeof
(
git_tree_cache
));
...
...
src/tree.c
View file @
c5448501
...
...
@@ -340,7 +340,7 @@ size_t git_tree_entrycount(const git_tree *tree)
return
tree
->
entries
.
size
;
}
unsigned
in
t
git_treebuilder_entrycount
(
git_treebuilder
*
bld
)
size_
t
git_treebuilder_entrycount
(
git_treebuilder
*
bld
)
{
assert
(
bld
);
...
...
src/util.c
View file @
c5448501
...
...
@@ -192,7 +192,7 @@ int git__strntol32(int32_t *result, const char *nptr, size_t nptr_len, const cha
tmp_int
=
tmp_long
&
0xFFFFFFFF
;
if
(
tmp_int
!=
tmp_long
)
{
int
len
=
tmp_endptr
-
nptr
;
int
len
=
(
int
)(
tmp_endptr
-
nptr
)
;
git_error_set
(
GIT_ERROR_INVALID
,
"failed to convert: '%.*s' is too large"
,
len
,
nptr
);
return
-
1
;
}
...
...
@@ -802,23 +802,23 @@ static const int8_t utf8proc_utf8class[256] = {
4
,
4
,
4
,
4
,
4
,
4
,
4
,
4
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
int
git__utf8_charlen
(
const
uint8_t
*
str
,
in
t
str_len
)
int
git__utf8_charlen
(
const
uint8_t
*
str
,
size_
t
str_len
)
{
in
t
length
,
i
;
size_
t
length
,
i
;
length
=
utf8proc_utf8class
[
str
[
0
]];
if
(
!
length
)
return
-
1
;
if
(
str_len
>
=
0
&&
length
>
str_len
)
return
-
str_len
;
if
(
str_len
>
0
&&
length
>
str_len
)
return
-
1
;
for
(
i
=
1
;
i
<
length
;
i
++
)
{
if
((
str
[
i
]
&
0xC0
)
!=
0x80
)
return
-
i
;
return
-
1
;
}
return
length
;
return
(
int
)
length
;
}
int
git__utf8_iterate
(
const
uint8_t
*
str
,
int
str_len
,
int32_t
*
dst
)
...
...
src/wildmatch.c
View file @
c5448501
...
...
@@ -250,7 +250,7 @@ static int dowild(const uchar *p, const uchar *text, unsigned int flags)
for
(
s
=
p
+=
2
;
(
p_ch
=
*
p
)
&&
p_ch
!=
']'
;
p
++
)
{}
/*SHARED ITERATOR*/
if
(
!
p_ch
)
return
WM_ABORT_ALL
;
i
=
p
-
s
-
1
;
i
=
(
int
)(
p
-
s
-
1
)
;
if
(
i
<
0
||
p
[
-
1
]
!=
':'
)
{
/* Didn't find ":]", so treat like a normal set. */
p
=
s
-
2
;
...
...
src/win32/path_w32.c
View file @
c5448501
...
...
@@ -140,14 +140,24 @@ int git_win32_path_canonicalize(git_win32_path path)
*
to
=
L'\0'
;
return
(
to
-
path
);
if
((
to
-
path
)
>
INT_MAX
)
{
SetLastError
(
ERROR_FILENAME_EXCED_RANGE
);
return
-
1
;
}
return
(
int
)(
to
-
path
);
}
int
git_win32_path__cwd
(
wchar_t
*
out
,
size_t
len
)
{
int
cwd_len
;
if
((
cwd_len
=
path__cwd
(
out
,
len
))
<
0
)
if
(
len
>
INT_MAX
)
{
errno
=
ENAMETOOLONG
;
return
-
1
;
}
if
((
cwd_len
=
path__cwd
(
out
,
(
int
)
len
))
<
0
)
return
-
1
;
/* UNC paths */
...
...
src/win32/thread.c
View file @
c5448501
...
...
@@ -42,15 +42,15 @@ int git_threads_init(void)
HMODULE
hModule
=
GetModuleHandleW
(
L"kernel32"
);
if
(
hModule
)
{
win32_srwlock_initialize
=
(
win32_srwlock_fn
)
win32_srwlock_initialize
=
(
win32_srwlock_fn
)
(
void
*
)
GetProcAddress
(
hModule
,
"InitializeSRWLock"
);
win32_srwlock_acquire_shared
=
(
win32_srwlock_fn
)
win32_srwlock_acquire_shared
=
(
win32_srwlock_fn
)
(
void
*
)
GetProcAddress
(
hModule
,
"AcquireSRWLockShared"
);
win32_srwlock_release_shared
=
(
win32_srwlock_fn
)
win32_srwlock_release_shared
=
(
win32_srwlock_fn
)
(
void
*
)
GetProcAddress
(
hModule
,
"ReleaseSRWLockShared"
);
win32_srwlock_acquire_exclusive
=
(
win32_srwlock_fn
)
win32_srwlock_acquire_exclusive
=
(
win32_srwlock_fn
)
(
void
*
)
GetProcAddress
(
hModule
,
"AcquireSRWLockExclusive"
);
win32_srwlock_release_exclusive
=
(
win32_srwlock_fn
)
win32_srwlock_release_exclusive
=
(
win32_srwlock_fn
)
(
void
*
)
GetProcAddress
(
hModule
,
"ReleaseSRWLockExclusive"
);
}
...
...
src/win32/w32_buffer.c
View file @
c5448501
...
...
@@ -25,13 +25,17 @@ int git_buf_put_w(git_buf *buf, const wchar_t *string_w, size_t len_w)
int
utf8_len
,
utf8_write_len
;
size_t
new_size
;
if
(
!
len_w
)
if
(
!
len_w
)
{
return
0
;
}
else
if
(
len_w
>
INT_MAX
)
{
git_error_set_oom
();
return
-
1
;
}
assert
(
string_w
);
/* Measure the string necessary for conversion */
if
((
utf8_len
=
WideCharToMultiByte
(
CP_UTF8
,
WC_ERR_INVALID_CHARS
,
string_w
,
len_w
,
NULL
,
0
,
NULL
,
NULL
))
==
0
)
if
((
utf8_len
=
WideCharToMultiByte
(
CP_UTF8
,
WC_ERR_INVALID_CHARS
,
string_w
,
(
int
)
len_w
,
NULL
,
0
,
NULL
,
NULL
))
==
0
)
return
0
;
assert
(
utf8_len
>
0
);
...
...
@@ -43,7 +47,7 @@ int git_buf_put_w(git_buf *buf, const wchar_t *string_w, size_t len_w)
return
-
1
;
if
((
utf8_write_len
=
WideCharToMultiByte
(
CP_UTF8
,
WC_ERR_INVALID_CHARS
,
string_w
,
len_w
,
&
buf
->
ptr
[
buf
->
size
],
utf8_len
,
NULL
,
NULL
))
==
0
)
CP_UTF8
,
WC_ERR_INVALID_CHARS
,
string_w
,
(
int
)
len_w
,
&
buf
->
ptr
[
buf
->
size
],
utf8_len
,
NULL
,
NULL
))
==
0
)
return
handle_wc_error
();
assert
(
utf8_write_len
==
utf8_len
);
...
...
src/win32/w32_stack.c
View file @
c5448501
...
...
@@ -13,11 +13,6 @@
#include "win32/posix.h"
#include "hash.h"
/**
* This is supposedly defined in WinBase.h (from Windows.h) but there were linker issues.
*/
USHORT
WINAPI
RtlCaptureStackBackTrace
(
ULONG
,
ULONG
,
PVOID
*
,
PULONG
);
static
bool
g_win32_stack_initialized
=
false
;
static
HANDLE
g_win32_stack_process
=
INVALID_HANDLE_VALUE
;
static
git_win32__stack__aux_cb_alloc
g_aux_cb_alloc
=
NULL
;
...
...
src/win32/w32_util.c
View file @
c5448501
...
...
@@ -93,3 +93,34 @@ int git_win32__hidden(bool *out, const char *path)
*
out
=
(
attrs
&
FILE_ATTRIBUTE_HIDDEN
)
?
true
:
false
;
return
0
;
}
int
git_win32__file_attribute_to_stat
(
struct
stat
*
st
,
const
WIN32_FILE_ATTRIBUTE_DATA
*
attrdata
,
const
wchar_t
*
path
)
{
git_win32__stat_init
(
st
,
attrdata
->
dwFileAttributes
,
attrdata
->
nFileSizeHigh
,
attrdata
->
nFileSizeLow
,
attrdata
->
ftCreationTime
,
attrdata
->
ftLastAccessTime
,
attrdata
->
ftLastWriteTime
);
if
(
attrdata
->
dwFileAttributes
&
FILE_ATTRIBUTE_REPARSE_POINT
&&
path
)
{
git_win32_path
target
;
if
(
git_win32_path_readlink_w
(
target
,
path
)
>=
0
)
{
st
->
st_mode
=
(
st
->
st_mode
&
~
S_IFMT
)
|
S_IFLNK
;
/* st_size gets the UTF-8 length of the target name, in bytes,
* not counting the NULL terminator */
if
((
st
->
st_size
=
git__utf16_to_8
(
NULL
,
0
,
target
))
<
0
)
{
git_error_set
(
GIT_ERROR_OS
,
"could not convert reparse point name for '%ls'"
,
path
);
return
-
1
;
}
}
}
return
0
;
}
src/win32/w32_util.h
View file @
c5448501
...
...
@@ -59,6 +59,11 @@ extern int git_win32__set_hidden(const char *path, bool hidden);
*/
extern
int
git_win32__hidden
(
bool
*
hidden
,
const
char
*
path
);
extern
int
git_win32__file_attribute_to_stat
(
struct
stat
*
st
,
const
WIN32_FILE_ATTRIBUTE_DATA
*
attrdata
,
const
wchar_t
*
path
);
/**
* Converts a FILETIME structure to a struct timespec.
*
...
...
@@ -136,35 +141,4 @@ GIT_INLINE(void) git_win32__file_information_to_stat(
fileinfo
->
ftLastWriteTime
);
}
GIT_INLINE
(
int
)
git_win32__file_attribute_to_stat
(
struct
stat
*
st
,
const
WIN32_FILE_ATTRIBUTE_DATA
*
attrdata
,
const
wchar_t
*
path
)
{
git_win32__stat_init
(
st
,
attrdata
->
dwFileAttributes
,
attrdata
->
nFileSizeHigh
,
attrdata
->
nFileSizeLow
,
attrdata
->
ftCreationTime
,
attrdata
->
ftLastAccessTime
,
attrdata
->
ftLastWriteTime
);
if
(
attrdata
->
dwFileAttributes
&
FILE_ATTRIBUTE_REPARSE_POINT
&&
path
)
{
git_win32_path
target
;
if
(
git_win32_path_readlink_w
(
target
,
path
)
>=
0
)
{
st
->
st_mode
=
(
st
->
st_mode
&
~
S_IFMT
)
|
S_IFLNK
;
/* st_size gets the UTF-8 length of the target name, in bytes,
* not counting the NULL terminator */
if
((
st
->
st_size
=
git__utf16_to_8
(
NULL
,
0
,
target
))
<
0
)
{
git_error_set
(
GIT_ERROR_OS
,
"could not convert reparse point name for '%ls'"
,
path
);
return
-
1
;
}
}
}
return
0
;
}
#endif
src/worktree.c
View file @
c5448501
...
...
@@ -34,7 +34,7 @@ int git_worktree_list(git_strarray *wts, git_repository *repo)
git_vector
worktrees
=
GIT_VECTOR_INIT
;
git_buf
path
=
GIT_BUF_INIT
;
char
*
worktree
;
unsigned
i
,
len
;
size_t
i
,
len
;
int
error
;
assert
(
wts
&&
repo
);
...
...
tests/clar.c
View file @
c5448501
...
...
@@ -67,7 +67,7 @@
# define PRIxZ "Ix"
# endif
# if
def _MSC_VER
# if
defined(_MSC_VER) || defined(__MINGW32__)
typedef
struct
stat
STAT_T
;
# else
typedef
struct
_stat
STAT_T
;
...
...
tests/core/link.c
View file @
c5448501
...
...
@@ -54,7 +54,7 @@ static void do_symlink(const char *old, const char *new, int is_dir)
create_symlink_func
pCreateSymbolicLink
;
cl_assert
(
module
=
GetModuleHandle
(
"kernel32"
));
cl_assert
(
pCreateSymbolicLink
=
(
create_symlink_func
)
GetProcAddress
(
module
,
"CreateSymbolicLinkA"
));
cl_assert
(
pCreateSymbolicLink
=
(
create_symlink_func
)
(
void
*
)
GetProcAddress
(
module
,
"CreateSymbolicLinkA"
));
cl_win32_pass
(
pCreateSymbolicLink
(
new
,
old
,
is_dir
));
#endif
...
...
@@ -70,7 +70,7 @@ static void do_hardlink(const char *old, const char *new)
create_hardlink_func
pCreateHardLink
;
cl_assert
(
module
=
GetModuleHandle
(
"kernel32"
));
cl_assert
(
pCreateHardLink
=
(
create_hardlink_func
)
GetProcAddress
(
module
,
"CreateHardLinkA"
));
cl_assert
(
pCreateHardLink
=
(
create_hardlink_func
)
(
void
*
)
GetProcAddress
(
module
,
"CreateHardLinkA"
));
cl_win32_pass
(
pCreateHardLink
(
new
,
old
,
0
));
#endif
...
...
tests/object/tree/read.c
View file @
c5448501
...
...
@@ -75,8 +75,9 @@ void test_object_tree_read__two(void)
}
#define BIGFILE "bigfile"
#ifdef GIT_ARCH_64
#
define BIGFILE_SIZE (size_t)4 * 1024 * 1024 * 1024
/* 4 GiB */
#
define BIGFILE_SIZE (off_t)4294967296
#else
# define BIGFILE_SIZE SIZE_MAX
#endif
...
...
tests/online/fetchhead.c
View file @
c5448501
...
...
@@ -35,10 +35,10 @@ static void fetchhead_test_clone(void)
cl_git_pass
(
git_clone
(
&
g_repo
,
LIVE_REPO_URL
,
"./foo"
,
&
g_options
));
}
static
in
t
count_references
(
void
)
static
size_
t
count_references
(
void
)
{
git_strarray
array
;
in
t
refs
;
size_
t
refs
;
cl_git_pass
(
git_reference_list
(
&
array
,
g_repo
));
refs
=
array
.
count
;
...
...
@@ -118,7 +118,7 @@ void test_online_fetchhead__no_merges(void)
void
test_online_fetchhead__explicit_dst_refspec_creates_branch
(
void
)
{
git_reference
*
ref
;
in
t
refs
;
size_
t
refs
;
fetchhead_test_clone
();
refs
=
count_references
();
...
...
@@ -133,7 +133,7 @@ void test_online_fetchhead__explicit_dst_refspec_creates_branch(void)
void
test_online_fetchhead__empty_dst_refspec_creates_no_branch
(
void
)
{
git_reference
*
ref
;
in
t
refs
;
size_
t
refs
;
fetchhead_test_clone
();
refs
=
count_references
();
...
...
@@ -146,7 +146,7 @@ void test_online_fetchhead__empty_dst_refspec_creates_no_branch(void)
void
test_online_fetchhead__colon_only_dst_refspec_creates_no_branch
(
void
)
{
in
t
refs
;
size_
t
refs
;
fetchhead_test_clone
();
refs
=
count_references
();
...
...
tests/worktree/worktree.c
View file @
c5448501
...
...
@@ -42,7 +42,7 @@ void test_worktree_worktree__list_with_invalid_worktree_dirs(void)
};
git_buf
path
=
GIT_BUF_INIT
;
git_strarray
wts
;
unsigned
i
,
j
,
len
;
size_t
i
,
j
,
len
;
cl_git_pass
(
git_buf_printf
(
&
path
,
"%s/worktrees/invalid"
,
fixture
.
repo
->
commondir
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment