-
Notifications
You must be signed in to change notification settings - Fork 10
deps: update libcurl to 8.18.0 #407
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: node-v24.x-nsolid-v6.x
Are you sure you want to change the base?
Conversation
WalkthroughLibcurl updated to 8.18.0 with broad internal refactors: memory API standardized to curlx_* wrappers, many buffer and transport types tightened (uint8_t/uint16_t), time APIs changed to pointer/ms variants, multiple public APIs converted to CURLcode-based returns, Windows CE support removed, and large-scale header/include cleanup and formatting normalization. Changes
Sequence Diagram(s)(Skipped — changes are broad and heterogeneous; no single new multi-component flow with clear sequential interactions isolated by this diff.) Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
🤖 Fix all issues with AI agents
In @deps/curl/include/curl/system.h:
- Around line 137-143: Remove the entire UNDER_CE conditional branch that
defines Windows CE specific macros (the #elif defined(UNDER_CE) block and its
definitions of CURL_TYPEOF_CURL_OFF_T, CURL_FORMAT_CURL_OFF_T,
CURL_FORMAT_CURL_OFF_TU, CURL_SUFFIX_CURL_OFF_T, CURL_SUFFIX_CURL_OFF_TU, and
CURL_TYPEOF_CURL_SOCKLEN_T); delete that block so Windows CE support is not
compiled or preserved, ensuring the file follows libcurl 8.18.0’s removal of
Windows CE/CeGCC support and falls through to the appropriate platform branches
instead.
In @deps/curl/lib/curl_get_line.c:
- Line 31: The appendnl macro declares a parameter b but ignores it and always
uses buf; change the macro to use the parameter (preferred) by redefining
appendnl(b) as curlx_dyn_addn((b), "\n", 1) and update all call sites to pass
the buffer variable (e.g., buf) instead of relying on the outer-scope buf, or
alternatively remove the parameter by redefining appendnl() to use buf and
update call sites to call it with no arguments; reference symbols: appendnl,
curlx_dyn_addn, and the buffer variable (buf).
In @deps/curl/lib/curlx/fopen.c:
- Around line 439-503: The retry loop in curlx_win32_rename currently spins with
Sleep(1) up to max_wait_ms and discards MoveFileEx errors; update
curlx_win32_rename to (1) capture the failing error from MoveFileEx via
GetLastError() each iteration and map/preserve it (set errno appropriately)
before returning so callers can distinguish failure reasons, (2) back off the
retry sleep to a more sensible strategy (e.g., exponential or increasing sleeps
up to a cap rather than fixed 1ms) to avoid CPU churn and give other processes
time to close handles, and (3) stop retrying immediately for non-transient
errors by checking the GetLastError() code (only retry on errors that indicate
temporary lock/deny conditions) while returning promptly for other errors;
reference curlx_win32_rename, MoveFileEx, max_wait_ms, Sleep, GetLastError and
errno mapping when making these changes.
- Line 324: The code directly assigns errno = EINVAL in fopen-related logic
which breaks portability; replace those direct assignments with the portability
macro by calling CURL_SETERRNO(EINVAL) at each occurrence (e.g., the sites
currently using errno = EINVAL around fopen handling) so platforms without errno
support use the no-op implementation; ensure you update all four occurrences
that were flagged (the lines assigning errno) to use CURL_SETERRNO(EINVAL)
instead.
In @deps/curl/lib/doh.c:
- Around line 844-846: The preprocessor macro in the doh.c conditional is
misspelled: change the #ifdef from USE_HTTTPS to the correct macro USE_HTTPSRR
so the HTTPS RR-specific branch surrounding the if ((type != CURL_DNS_TYPE_NS)
&& !d->numcname && !d->numaddr && !d->numhttps_rrs) executes when HTTPS RR
support is compiled in; update the macro name only (no logic changes) wherever
the incorrect USE_HTTTPS appears in this conditional block so the intended
branch is compiled.
In @deps/curl/lib/doh.h:
- Around line 119-120: The disabled-DoH macro for Curl_doh is wrong: update the
macro so its parameter list matches the function signature Curl_doh(struct
Curl_easy *data, const char *hostname, int port, int ip_version) (remove the
extra fifth parameter) and change its return from NULL to an appropriate
CURLcode such as CURLE_COULDNT_RESOLVE_HOST so callers that expect a CURLcode
compile and get a proper error value when CURL_DISABLE_DOH is defined.
🧹 Nitpick comments (3)
deps/curl/lib/dynhds.c (1)
326-326: Consider more idiomatic calloc parameter order.While functionally correct,
curlx_calloc(1, sizeof(nghttp2_nv) * dynhds->hds_len)would be clearer ascurlx_calloc(dynhds->hds_len, sizeof(nghttp2_nv))to better express "allocate N elements of size S."♻️ More idiomatic form
- nghttp2_nv *nva = curlx_calloc(1, sizeof(nghttp2_nv) * dynhds->hds_len); + nghttp2_nv *nva = curlx_calloc(dynhds->hds_len, sizeof(nghttp2_nv));deps/curl/lib/curlx/fopen.c (1)
253-294: Consider setting errno on failure for consistency.The new
curlx_CreateFilefunction returnsINVALID_HANDLE_VALUEon failure but doesn't seterrno, while other functions in this file (e.g.,curlx_win32_open) do set errno. Callers might expect errno to be populated for error reporting.Proposed enhancement
/* !checksrc! disable BANNEDFUNC 1 */ handle = CreateFile(target, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + if(handle == INVALID_HANDLE_VALUE) { + errno = EINVAL; + } CURLX_FREE(fixed);deps/curl/lib/curlx/warnless.c (1)
309-317: Minor: Consider documenting the output parameter behavior on failure.
curlx_sztouzsets*puznum = 0on failure, which is reasonable but worth noting. Callers should check the return value rather than relying on the output value.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (300)
deps/curl/curl.gypdeps/curl/include/Makefile.indeps/curl/include/curl/Makefile.indeps/curl/include/curl/curl.hdeps/curl/include/curl/curlver.hdeps/curl/include/curl/easy.hdeps/curl/include/curl/header.hdeps/curl/include/curl/multi.hdeps/curl/include/curl/options.hdeps/curl/include/curl/system.hdeps/curl/include/curl/typecheck-gcc.hdeps/curl/include/curl/urlapi.hdeps/curl/include/curl/websockets.hdeps/curl/lib/CMakeLists.txtdeps/curl/lib/Makefile.amdeps/curl/lib/Makefile.indeps/curl/lib/Makefile.incdeps/curl/lib/altsvc.cdeps/curl/lib/altsvc.hdeps/curl/lib/amigaos.cdeps/curl/lib/amigaos.hdeps/curl/lib/arpa_telnet.hdeps/curl/lib/asyn-ares.cdeps/curl/lib/asyn-base.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/asyn.hdeps/curl/lib/bufq.cdeps/curl/lib/bufq.hdeps/curl/lib/bufref.cdeps/curl/lib/bufref.hdeps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-h1-proxy.hdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-h2-proxy.hdeps/curl/lib/cf-haproxy.cdeps/curl/lib/cf-haproxy.hdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-https-connect.hdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/cf-ip-happy.hdeps/curl/lib/cf-socket.cdeps/curl/lib/cf-socket.hdeps/curl/lib/cfilters.cdeps/curl/lib/cfilters.hdeps/curl/lib/config-os400.hdeps/curl/lib/config-plan9.hdeps/curl/lib/config-win32.hdeps/curl/lib/conncache.cdeps/curl/lib/conncache.hdeps/curl/lib/connect.cdeps/curl/lib/connect.hdeps/curl/lib/content_encoding.cdeps/curl/lib/content_encoding.hdeps/curl/lib/cookie.cdeps/curl/lib/cookie.hdeps/curl/lib/cshutdn.cdeps/curl/lib/cshutdn.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_config-cmake.h.indeps/curl/lib/curl_config.h.indeps/curl/lib/curl_ctype.hdeps/curl/lib/curl_endian.cdeps/curl/lib/curl_fnmatch.cdeps/curl/lib/curl_fnmatch.hdeps/curl/lib/curl_fopen.cdeps/curl/lib/curl_fopen.hdeps/curl/lib/curl_get_line.cdeps/curl/lib/curl_get_line.hdeps/curl/lib/curl_gethostname.cdeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_gssapi.hdeps/curl/lib/curl_hmac.hdeps/curl/lib/curl_ldap.hdeps/curl/lib/curl_md4.hdeps/curl/lib/curl_memory.hdeps/curl/lib/curl_memrchr.cdeps/curl/lib/curl_memrchr.hdeps/curl/lib/curl_ntlm_core.cdeps/curl/lib/curl_ntlm_core.hdeps/curl/lib/curl_range.cdeps/curl/lib/curl_range.hdeps/curl/lib/curl_rtmp.cdeps/curl/lib/curl_sasl.cdeps/curl/lib/curl_sasl.hdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_setup_once.hdeps/curl/lib/curl_sha256.hdeps/curl/lib/curl_sha512_256.cdeps/curl/lib/curl_sha512_256.hdeps/curl/lib/curl_share.cdeps/curl/lib/curl_share.hdeps/curl/lib/curl_sspi.cdeps/curl/lib/curl_sspi.hdeps/curl/lib/curl_threads.cdeps/curl/lib/curl_trc.cdeps/curl/lib/curl_trc.hdeps/curl/lib/curlx/base64.cdeps/curl/lib/curlx/base64.hdeps/curl/lib/curlx/binmode.hdeps/curl/lib/curlx/curlx.hdeps/curl/lib/curlx/dynbuf.cdeps/curl/lib/curlx/dynbuf.hdeps/curl/lib/curlx/fopen.cdeps/curl/lib/curlx/fopen.hdeps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curlx/inet_pton.hdeps/curl/lib/curlx/multibyte.cdeps/curl/lib/curlx/multibyte.hdeps/curl/lib/curlx/nonblock.cdeps/curl/lib/curlx/nonblock.hdeps/curl/lib/curlx/snprintf.hdeps/curl/lib/curlx/strcopy.cdeps/curl/lib/curlx/strcopy.hdeps/curl/lib/curlx/strerr.cdeps/curl/lib/curlx/strparse.cdeps/curl/lib/curlx/strparse.hdeps/curl/lib/curlx/timediff.cdeps/curl/lib/curlx/timediff.hdeps/curl/lib/curlx/timeval.cdeps/curl/lib/curlx/timeval.hdeps/curl/lib/curlx/version_win32.cdeps/curl/lib/curlx/version_win32.hdeps/curl/lib/curlx/wait.cdeps/curl/lib/curlx/wait.hdeps/curl/lib/curlx/warnless.cdeps/curl/lib/curlx/warnless.hdeps/curl/lib/curlx/winapi.cdeps/curl/lib/cw-out.cdeps/curl/lib/cw-out.hdeps/curl/lib/cw-pause.cdeps/curl/lib/cw-pause.hdeps/curl/lib/dict.cdeps/curl/lib/dict.hdeps/curl/lib/dllmain.cdeps/curl/lib/doh.cdeps/curl/lib/doh.hdeps/curl/lib/dynhds.cdeps/curl/lib/dynhds.hdeps/curl/lib/easy.cdeps/curl/lib/easy_lock.hdeps/curl/lib/easygetopt.cdeps/curl/lib/easyif.hdeps/curl/lib/easyoptions.cdeps/curl/lib/easyoptions.hdeps/curl/lib/escape.cdeps/curl/lib/escape.hdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/fake_addrinfo.hdeps/curl/lib/file.cdeps/curl/lib/file.hdeps/curl/lib/fileinfo.cdeps/curl/lib/fileinfo.hdeps/curl/lib/formdata.cdeps/curl/lib/formdata.hdeps/curl/lib/ftp.cdeps/curl/lib/ftp.hdeps/curl/lib/ftplistparser.cdeps/curl/lib/ftplistparser.hdeps/curl/lib/functypes.hdeps/curl/lib/getenv.cdeps/curl/lib/getinfo.cdeps/curl/lib/getinfo.hdeps/curl/lib/gopher.cdeps/curl/lib/gopher.hdeps/curl/lib/hash.cdeps/curl/lib/hash.hdeps/curl/lib/headers.cdeps/curl/lib/headers.hdeps/curl/lib/hmac.cdeps/curl/lib/hostip.cdeps/curl/lib/hostip.hdeps/curl/lib/hostip4.cdeps/curl/lib/hostip6.cdeps/curl/lib/hsts.cdeps/curl/lib/hsts.hdeps/curl/lib/http.cdeps/curl/lib/http.hdeps/curl/lib/http1.cdeps/curl/lib/http1.hdeps/curl/lib/http2.cdeps/curl/lib/http2.hdeps/curl/lib/http_aws_sigv4.cdeps/curl/lib/http_aws_sigv4.hdeps/curl/lib/http_chunks.cdeps/curl/lib/http_chunks.hdeps/curl/lib/http_digest.cdeps/curl/lib/http_negotiate.cdeps/curl/lib/http_negotiate.hdeps/curl/lib/http_ntlm.cdeps/curl/lib/http_ntlm.hdeps/curl/lib/http_proxy.cdeps/curl/lib/http_proxy.hdeps/curl/lib/httpsrr.cdeps/curl/lib/httpsrr.hdeps/curl/lib/idn.cdeps/curl/lib/idn.hdeps/curl/lib/if2ip.cdeps/curl/lib/if2ip.hdeps/curl/lib/imap.cdeps/curl/lib/imap.hdeps/curl/lib/ldap.cdeps/curl/lib/llist.cdeps/curl/lib/llist.hdeps/curl/lib/macos.cdeps/curl/lib/macos.hdeps/curl/lib/md4.cdeps/curl/lib/md5.cdeps/curl/lib/memdebug.cdeps/curl/lib/memdebug.hdeps/curl/lib/mime.cdeps/curl/lib/mime.hdeps/curl/lib/mprintf.cdeps/curl/lib/mqtt.cdeps/curl/lib/mqtt.hdeps/curl/lib/multi.cdeps/curl/lib/multi_ev.cdeps/curl/lib/multi_ev.hdeps/curl/lib/multi_ntfy.cdeps/curl/lib/multi_ntfy.hdeps/curl/lib/multihandle.hdeps/curl/lib/multiif.hdeps/curl/lib/netrc.cdeps/curl/lib/netrc.hdeps/curl/lib/noproxy.cdeps/curl/lib/openldap.cdeps/curl/lib/optiontable.pldeps/curl/lib/parsedate.cdeps/curl/lib/parsedate.hdeps/curl/lib/pingpong.cdeps/curl/lib/pingpong.hdeps/curl/lib/pop3.cdeps/curl/lib/pop3.hdeps/curl/lib/progress.cdeps/curl/lib/progress.hdeps/curl/lib/psl.cdeps/curl/lib/psl.hdeps/curl/lib/rand.cdeps/curl/lib/rand.hdeps/curl/lib/ratelimit.cdeps/curl/lib/ratelimit.hdeps/curl/lib/rename.cdeps/curl/lib/rename.hdeps/curl/lib/request.cdeps/curl/lib/request.hdeps/curl/lib/rtsp.cdeps/curl/lib/rtsp.hdeps/curl/lib/select.cdeps/curl/lib/select.hdeps/curl/lib/sendf.cdeps/curl/lib/sendf.hdeps/curl/lib/setopt.cdeps/curl/lib/setopt.hdeps/curl/lib/setup-os400.hdeps/curl/lib/setup-vms.hdeps/curl/lib/sha256.cdeps/curl/lib/sigpipe.hdeps/curl/lib/slist.cdeps/curl/lib/slist.hdeps/curl/lib/smb.cdeps/curl/lib/smb.hdeps/curl/lib/smtp.cdeps/curl/lib/smtp.hdeps/curl/lib/sockaddr.hdeps/curl/lib/socketpair.cdeps/curl/lib/socketpair.hdeps/curl/lib/socks.cdeps/curl/lib/socks.hdeps/curl/lib/socks_gssapi.cdeps/curl/lib/socks_sspi.cdeps/curl/lib/speedcheck.cdeps/curl/lib/splay.cdeps/curl/lib/splay.hdeps/curl/lib/strcase.cdeps/curl/lib/strcase.hdeps/curl/lib/strdup.cdeps/curl/lib/strdup.hdeps/curl/lib/strequal.cdeps/curl/lib/strerror.cdeps/curl/lib/strerror.hdeps/curl/lib/system_win32.cdeps/curl/lib/system_win32.hdeps/curl/lib/telnet.cdeps/curl/lib/tftp.cdeps/curl/lib/transfer.cdeps/curl/lib/transfer.hdeps/curl/lib/uint-bset.cdeps/curl/lib/uint-bset.hdeps/curl/lib/uint-hash.cdeps/curl/lib/uint-hash.hdeps/curl/lib/uint-spbset.cdeps/curl/lib/uint-spbset.hdeps/curl/lib/uint-table.cdeps/curl/lib/uint-table.hdeps/curl/lib/url.cdeps/curl/lib/url.hdeps/curl/lib/urlapi.cdeps/curl/lib/urldata.h
💤 Files with no reviewable changes (22)
- deps/curl/lib/curl_fnmatch.h
- deps/curl/lib/curlx/version_win32.h
- deps/curl/lib/curl_endian.c
- deps/curl/lib/file.h
- deps/curl/lib/cf-https-connect.h
- deps/curl/lib/curl_sasl.h
- deps/curl/lib/dynhds.h
- deps/curl/lib/curlx/nonblock.h
- deps/curl/lib/curl_memory.h
- deps/curl/lib/curl_fopen.h
- deps/curl/lib/cf-h2-proxy.h
- deps/curl/lib/dict.h
- deps/curl/lib/easyif.h
- deps/curl/lib/curl_get_line.h
- deps/curl/lib/cf-h1-proxy.h
- deps/curl/lib/curlx/timediff.h
- deps/curl/lib/curlx/wait.h
- deps/curl/lib/curl_md4.h
- deps/curl/lib/cshutdn.h
- deps/curl/lib/escape.h
- deps/curl/lib/curl_hmac.h
- deps/curl/lib/curl_sspi.h
🧰 Additional context used
🧠 Learnings (70)
📚 Learning: 2025-12-03T14:35:32.707Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:32.707Z
Learning: Applies to deps/grpc/src/core/util/**/*.{cc,h,cpp} : Use string manipulation functions from `string.h` and `string.cc`
Applied to files:
deps/curl/lib/curl_gethostname.cdeps/curl/lib/curlx/strcopy.cdeps/curl/lib/curlx/strparse.cdeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_memrchr.hdeps/curl/lib/curlx/strerr.c
📚 Learning: 2025-12-03T14:35:32.707Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:32.707Z
Learning: Applies to deps/grpc/src/core/util/**/*.{cc,h,cpp} : Use time-related functions from `time.h` and `time.cc`
Applied to files:
deps/curl/lib/config-os400.hdeps/curl/lib/curlx/timeval.hdeps/curl/lib/curlx/timeval.cdeps/curl/lib/curlx/timediff.c
📚 Learning: 2025-12-03T14:35:34.369Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:34.369Z
Learning: Applies to deps/grpc/src/core/util/src/**/string.{h,cc} : String manipulation functions should be implemented in `string.h` and `string.cc`
Applied to files:
deps/curl/lib/curlx/strcopy.cdeps/curl/lib/curl_memrchr.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace_flags.yaml : Add new trace flags as entries in the `trace_flags.yaml` file with the flag name and a brief description of what it does
Applied to files:
deps/curl/lib/curl_trc.hdeps/curl/lib/curl_trc.c
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_DLOG(tracer, level)` macro to log trace messages in debug builds when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:34:55.521Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/telemetry/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:55.521Z
Learning: Applies to deps/grpc/src/core/telemetry/**/telemetry/tcp_tracer.{h,cc} : Use the `TcpTracer` class to trace TCP-level events in tcp_tracer.h / tcp_tracer.cc
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use the `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use the `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:34:02.613Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:02.613Z
Learning: Applies to deps/grpc/src/core/resolver/dns/**/*.{h,cc} : Use DNS for name resolution when implementing the DNS resolver plugin
Applied to files:
deps/curl/include/curl/curl.hdeps/curl/lib/asyn-base.cdeps/curl/lib/doh.hdeps/curl/lib/doh.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Provide a platform-independent way to work with network addresses in utility functions
Applied to files:
deps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:31:59.979Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:59.979Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/*sockaddr_utils.{h,cc} : Work with `sockaddr` structures using functions from `sockaddr_utils.h`/`sockaddr_utils.cc`, including converting to/from string representations and comparing for equality
Applied to files:
deps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/cf-socket.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/connect.cdeps/curl/lib/config-win32.hdeps/curl/lib/cf-socket.c
📚 Learning: 2025-12-03T14:31:54.774Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:54.774Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/sockaddr_utils.{h,cc} : Use `sockaddr_utils.h` / `sockaddr_utils.cc` for working with `sockaddr` structures, including converting them to/from string representations and comparing them for equality
Applied to files:
deps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/cf-socket.hdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/connect.cdeps/curl/lib/config-win32.hdeps/curl/lib/cf-socket.c
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/*address*.{h,cc} : Design address utility functions to be efficient and avoid common pitfalls when working with network addresses
Applied to files:
deps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/curlx/warnless.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/config-win32.hdeps/curl/lib/cf-socket.c
📚 Learning: 2025-12-03T14:29:08.569Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:08.569Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/{alts_credentials.h,alts_credentials.cc} : Implement credentials for ALTS transport security in `alts_credentials.h` / `alts_credentials.cc`
Applied to files:
deps/curl/lib/altsvc.hdeps/curl/lib/altsvc.c
📚 Learning: 2025-12-03T14:29:05.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:05.695Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/alts_credentials.{h,cc} : Use ALTS (Application Layer Transport Security) credentials to configure ALTS security for the transport
Applied to files:
deps/curl/lib/altsvc.hdeps/curl/lib/altsvc.c
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/{sockaddr_utils.h,sockaddr_utils.cc} : Use `sockaddr_utils.h` and `sockaddr_utils.cc` for working with `sockaddr` structures, including converting them to and from string representations, and comparing them for equality
Applied to files:
deps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/cf-socket.hdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/connect.c
📚 Learning: 2025-12-03T14:34:02.613Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:02.613Z
Learning: Applies to deps/grpc/src/core/resolver/sockaddr/**/*.{h,cc} : Use socket address lists for name resolution when implementing the sockaddr resolver plugin
Applied to files:
deps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/cf-socket.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:30:51.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chaotic_good/GEMINI.md:0-0
Timestamp: 2025-12-03T14:30:51.421Z
Learning: Applies to deps/grpc/src/core/ext/transport/chaotic_good/**/chaotic_good/client_transport.{h,cc} : Implement client-side transport logic in `client_transport.h` and `client_transport.cc`
Applied to files:
deps/curl/lib/cf-ip-happy.hdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/hpack_{encoder,parser}.{h,cc} : Implement HPACK (header compression algorithm as per RFC 7541) in the CHTTP2 transport to compress headers of gRPC requests and responses
Applied to files:
deps/curl/lib/cf-ip-happy.hdeps/curl/lib/cf-haproxy.hdeps/curl/lib/cf-haproxy.cdeps/curl/lib/content_encoding.cdeps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:35:35.065Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:35.065Z
Learning: Applies to deps/grpc/src/core/util/src/core/util/time.{h,cc} : Time-related functions should be implemented in dedicated header and implementation files (time.h / time.cc)
Applied to files:
deps/curl/lib/curlx/timeval.hdeps/curl/lib/curlx/timeval.cdeps/curl/lib/curlx/timediff.c
📚 Learning: 2025-12-03T14:35:34.369Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:34.369Z
Learning: Applies to deps/grpc/src/core/util/src/**/time.{h,cc} : Time-related functions should be implemented in `time.h` and `time.cc`
Applied to files:
deps/curl/lib/curlx/timeval.hdeps/curl/lib/curlx/timeval.cdeps/curl/lib/curlx/timediff.c
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/c_ares/**/*.{c,cc,cpp,h,hpp} : Use c-ares library for DNS resolution implementations in the c_ares subdirectory
Applied to files:
deps/curl/curl.gypdeps/curl/lib/asyn-base.cdeps/curl/lib/doh.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/asyn-ares.cdeps/curl/lib/curl_config.h.indeps/curl/lib/config-win32.hdeps/curl/lib/fake_addrinfo.hdeps/curl/lib/asyn.h
📚 Learning: 2025-12-03T14:35:21.897Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/tsi/ssl/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:21.897Z
Learning: Applies to deps/grpc/src/core/tsi/ssl/**/*.{c,cc,cpp,h,hpp} : Keep OpenSSL up-to-date to ensure that gRPC applications are secure
Applied to files:
deps/curl/curl.gypdeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_sha512_256.cdeps/curl/lib/Makefile.incdeps/curl/lib/connect.cdeps/curl/lib/curl_ntlm_core.c
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/security/**/*.{h,cc} : Implement security handshakers responsible for performing TLS and ALTS handshakes in the security/ subdirectory
Applied to files:
deps/curl/curl.gypdeps/curl/lib/Makefile.inc
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/transport/hpack_{encoder,parser}.{h,cc} : Implement HPACK (header compression algorithm) according to RFC 7541 for compressing gRPC request and response headers in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-haproxy.cdeps/curl/lib/content_encoding.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:41.247Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:41.247Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : The HTTP CONNECT handshaker implementation should be in `http_connect_handshaker.cc` for establishing connections to target servers through HTTP proxies
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/*.{h,cc} : Implement the HTTP CONNECT handshaker in the http_connect/ subdirectory
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/connect.hdeps/curl/lib/connect.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/client/chttp2_connector.{h,cc} : Implement client-side connector logic in CHTTP2 to create and establish new HTTP/2 transport connections
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/connect.hdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/connect.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/chttp2_transport.{h,cc} : Support HTTP/2 stream multiplexing over a single TCP connection for high performance and low latency in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/curl_setup.h
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: The HTTP CONNECT handshaker is responsible for establishing connections to target servers through HTTP proxies supporting the CONNECT method
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : HTTP CONNECT handshaker implementation should be contained in `http_connect_handshaker.cc`
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:31:36.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:36.421Z
Learning: HTTP CONNECT handshaker should be used in conjunction with security handshakers, such as the TLS handshaker, to establish secure connections to target servers
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: HTTP CONNECT handshaker should be used in conjunction with security handshakers (such as TLS handshaker) to establish secure connections to target servers
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/alpn/**/*.{h,cc} : Implement ALPN (Application-Layer Protocol Negotiation) for selecting the HTTP/2 protocol during the TLS handshake
Applied to files:
deps/curl/lib/altsvc.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/connect.hdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/connect.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/alpn/**/*.{h,cc} : Implement ALPN (Application-Layer Protocol Negotiation) to select the HTTP/2 protocol during the TLS handshake
Applied to files:
deps/curl/lib/altsvc.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/connect.hdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/connect.c
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/native/**/*.{c,cc,cpp,h,hpp} : Use native operating system DNS resolver for DNS resolution implementations in the native subdirectory
Applied to files:
deps/curl/lib/doh.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:32:52.516Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/iomgr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:52.516Z
Learning: Use `grpc_pollset` abstraction to efficiently monitor file descriptors for I/O events across multiple file descriptors
Applied to files:
deps/curl/lib/cshutdn.cdeps/curl/include/curl/multi.h
📚 Learning: 2025-12-03T14:34:02.613Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:02.613Z
Learning: Applies to deps/grpc/src/core/resolver/fake/**/*.{h,cc} : Implement fake/mock resolvers in the `fake/` subdirectory for testing purposes
Applied to files:
deps/curl/lib/fake_addrinfo.c
📚 Learning: 2025-12-03T14:35:34.369Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:34.369Z
Learning: Applies to deps/grpc/src/core/util/src/**/host_port.{h,cc} : Host and port string manipulation utilities should be implemented in `host_port.h` and `host_port.cc`
Applied to files:
deps/curl/lib/cf-socket.hdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:35:35.065Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:35.065Z
Learning: Applies to deps/grpc/src/core/util/src/core/util/host_port.{h,cc} : Host and port utility functions should be implemented in dedicated header and implementation files (host_port.h / host_port.cc)
Applied to files:
deps/curl/lib/cf-socket.h
📚 Learning: 2025-12-03T14:31:36.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:36.421Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : HTTP CONNECT handshaker implementation should be placed in `http_connect_handshaker.cc`
Applied to files:
deps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/transport/chttp2_transport.{h,cc} : Implement the `Http2Transport` class as the main transport class for CHTTP2, managing HTTP/2 connections, stream multiplexing, and coordination of flow control and header compression
Applied to files:
deps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/client/chttp2_connector.{h,cc} : Implement the client-side connector responsible for creating new CHTTP2 transport instances
Applied to files:
deps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:34:28.190Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/sockaddr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:28.190Z
Learning: Applies to deps/grpc/src/core/resolver/sockaddr/**/sockaddr_resolver.{h,cc} : Implement the `Resolver` interface for name resolution in sockaddr_resolver.h / sockaddr_resolver.cc
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:34:21.252Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/sockaddr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:21.252Z
Learning: Use sockaddr resolver implementation for name resolution from a list of socket addresses
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:33:59.671Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:33:59.671Z
Learning: Choose the appropriate DNS resolver implementation (c-ares, EventEngine, or native OS resolver) based on your application's performance requirements
Applied to files:
deps/curl/lib/asyn-thrdd.cdeps/curl/lib/asyn-ares.cdeps/curl/lib/config-win32.hdeps/curl/lib/fake_addrinfo.hdeps/curl/lib/asyn.h
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/event_engine/**/*.{c,cc,cpp,h,hpp} : Use EventEngine for DNS resolution implementations in the event_engine subdirectory
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:32:10.553Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/channel/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:10.553Z
Learning: Applies to deps/grpc/src/core/lib/channel/**/{promise_based_filter,connected_channel}.{h,cc} : When implementing new channel filters or transport-based channels, prefer promise-based implementations over legacy callback-based implementations as part of the migration to the new promise-based architecture.
Applied to files:
deps/curl/lib/cfilters.cdeps/curl/lib/cfilters.hdeps/curl/lib/cf-socket.c
📚 Learning: 2025-12-03T14:29:25.191Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/filters/channel_idle/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:25.191Z
Learning: Applies to deps/grpc/src/core/ext/filters/channel_idle/**/*channel*filter*.{h,cc} : Use the 'legacy' prefix in class names to indicate that filters are based on the older channel filter API and will likely be replaced by a more modern implementation in the future
Applied to files:
deps/curl/lib/cfilters.c
📚 Learning: 2025-12-03T14:28:57.122Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/call/GEMINI.md:0-0
Timestamp: 2025-12-03T14:28:57.122Z
Learning: Applies to deps/grpc/src/core/credentials/call/**/call_creds_util.{h,cc} : Use utility functions from `call_creds_util.h` / `call_creds_util.cc` for working with call credentials
Applied to files:
deps/curl/lib/curl_gssapi.c
📚 Learning: 2025-12-03T14:35:35.065Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:35.065Z
Learning: Applies to deps/grpc/src/core/util/src/core/util/string.{h,cc} : String manipulation functions should be implemented in dedicated header and implementation files (string.h / string.cc)
Applied to files:
deps/curl/lib/curl_memrchr.h
📚 Learning: 2025-12-03T14:29:08.569Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:08.569Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/{tls_credentials.h,tls_credentials.cc} : Implement credentials for TLS transport security in `tls_credentials.h` / `tls_credentials.cc`
Applied to files:
deps/curl/lib/Makefile.inc
📚 Learning: 2025-12-03T14:29:05.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:05.695Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/tls_credentials.{h,cc} : Use TLS (Transport Layer Security) credentials to configure TLS security for the Chttp2 transport
Applied to files:
deps/curl/lib/Makefile.inc
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/{chttp2_transport,frame}.{h,cc} : Implement logic for parsing and serializing HTTP/2 frames in the CHTTP2 transport core
Applied to files:
deps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/transport/frame.{h,cc} : Support HTTP/2 frame parsing and serialization with proper handling of all frame types in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Support all features of HTTP/2, including multiplexing, flow control, and header compression, in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/transport/flow_control.{h,cc} : Implement both stream-level and connection-level flow control in the CHTTP2 transport to prevent memory overuse and ensure fair bandwidth distribution
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:09.942Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:09.942Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/server/chttp2_server.{h,cc} : Implement server-side listener logic in CHTTP2 to accept incoming connections and create new HTTP/2 transport instances for each connection
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/flow_control.{h,cc} : Implement both stream-level and connection-level flow control in the CHTTP2 transport to prevent overconsumption of memory and ensure fair bandwidth distribution
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/frame.{h,cc} : Implement C++ classes to represent different types of HTTP/2 frames in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:30:54.187Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chaotic_good_legacy/GEMINI.md:0-0
Timestamp: 2025-12-03T14:30:54.187Z
Learning: Applies to deps/grpc/src/core/ext/transport/chaotic_good_legacy/**/chaotic_good_legacy/{chaotic_good_transport,client_transport,server_transport,frame,frame_header}.{h,cc} : Legacy Chaotic Good transport files should be maintained but marked as obsolete; new functionality should be added to the new `chaotic_good` directory implementation instead
Applied to files:
deps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:30:46.740Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chaotic_good/GEMINI.md:0-0
Timestamp: 2025-12-03T14:30:46.740Z
Learning: Applies to deps/grpc/src/core/ext/transport/chaotic_good/**/chaotic_good/client_transport.{h,cc} : Implement client-side transport in `client_transport.h` and `client_transport.cc` using the ChaoticGoodClientTransport class
Applied to files:
deps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/tcp_connect/**/*.{h,cc} : Implement a basic handshaker for TCP connections in the tcp_connect/ subdirectory
Applied to files:
deps/curl/lib/cf-ip-happy.cdeps/curl/lib/cf-socket.c
🪛 Cppcheck (2.19.0)
deps/curl/lib/curlx/inet_ntop.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/easyoptions.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/curl_fopen.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/amigaos.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/cf-h1-proxy.c
[error] 390-390: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
deps/curl/lib/curlx/warnless.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/curlx/timeval.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/cookie.c
[error] 1436-1436: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
deps/curl/lib/conncache.c
[error] 375-375: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
- GitHub Check: build-tarball
- GitHub Check: test-linux (ubuntu-24.04-arm)
- GitHub Check: test-linux (ubuntu-24.04)
- GitHub Check: test-macOS
- GitHub Check: lint-js-and-md
| #elif defined(UNDER_CE) | ||
| # ifdef __MINGW32CE__ | ||
| # define CURL_TYPEOF_CURL_OFF_T long long | ||
| # define CURL_FORMAT_CURL_OFF_T "lld" | ||
| # define CURL_FORMAT_CURL_OFF_TU "llu" | ||
| # define CURL_SUFFIX_CURL_OFF_T LL | ||
| # define CURL_SUFFIX_CURL_OFF_TU ULL | ||
| # define CURL_TYPEOF_CURL_SOCKLEN_T int | ||
| # else | ||
| # define CURL_TYPEOF_CURL_OFF_T __int64 | ||
| # define CURL_FORMAT_CURL_OFF_T "I64d" | ||
| # define CURL_FORMAT_CURL_OFF_TU "I64u" | ||
| # define CURL_SUFFIX_CURL_OFF_T i64 | ||
| # define CURL_SUFFIX_CURL_OFF_TU ui64 | ||
| # define CURL_TYPEOF_CURL_SOCKLEN_T int | ||
| # endif | ||
| # define CURL_TYPEOF_CURL_OFF_T __int64 | ||
| # define CURL_FORMAT_CURL_OFF_T "I64d" | ||
| # define CURL_FORMAT_CURL_OFF_TU "I64u" | ||
| # define CURL_SUFFIX_CURL_OFF_T i64 | ||
| # define CURL_SUFFIX_CURL_OFF_TU ui64 | ||
| # define CURL_TYPEOF_CURL_SOCKLEN_T int |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
libcurl 8.18.0 release notes changelog breaking changes
💡 Result:
Key breaking changes in libcurl / curl 8.18.0 (from the release notes / changelog):
- Drop support for Microsoft Visual Studio 2008 (Windows). [1]
- Drop Windows CE / CeGCC support. [1]
- Drop support for GnuTLS versions older than 3.6.5 (minimum now 3.6.5). [1]
- OpenSSL minimum bumped to 3.0.0 (older OpenSSL releases are no longer supported). [1][2]
(These are the dependency/platform removals in the official release notes; other changes in the release are feature additions and security fixes.)
Sources: [1] Daniel Stenberg — curl 8.18.0 release post; [2] curl versions/changelog pages.
🌐 Web query:
libcurl 8.18.0 security advisories vulnerabilities CVE
💡 Result:
libcurl 8.18.0 — published security fixes (CVE list)
libcurl 8.18.0 includes fixes for six CVEs:
- CVE-2025-13034 — skipping pinning check for HTTP/3 with GnuTLS. [1]
- CVE-2025-14017 — broken TLS options for threaded LDAPS. [1]
- CVE-2025-14524 — bearer token leak on cross-protocol redirect. [1]
- CVE-2025-14819 — OpenSSL partial chain store policy bypass. [1]
- CVE-2025-15079 — libssh global knownhost override. [1]
- CVE-2025-15224 — libssh key passphrase bypass without agent set. [1]
Source: curl 8.18.0 release announcement (vulnerability summary). [1] Additional curl CVE/vulnerabilities index. [2]
References
[1] curl 8.18.0 release announcement (security section).
[2] curl — Vulnerability table / CVE index.
Remove Windows CE (UNDER_CE) support entirely per libcurl 8.18.0 breaking changes.
libcurl 8.18.0 drops Windows CE / CeGCC support, a breaking change documented in the official release. The UNDER_CE branch (lines 137-143) should be removed entirely, not preserved or unified with other platforms. The current code preserves Windows CE type definitions contradicting the 8.18.0 requirement to eliminate this legacy platform support.
🤖 Prompt for AI Agents
In @deps/curl/include/curl/system.h around lines 137 - 143, Remove the entire
UNDER_CE conditional branch that defines Windows CE specific macros (the #elif
defined(UNDER_CE) block and its definitions of CURL_TYPEOF_CURL_OFF_T,
CURL_FORMAT_CURL_OFF_T, CURL_FORMAT_CURL_OFF_TU, CURL_SUFFIX_CURL_OFF_T,
CURL_SUFFIX_CURL_OFF_TU, and CURL_TYPEOF_CURL_SOCKLEN_T); delete that block so
Windows CE support is not compiled or preserved, ensuring the file follows
libcurl 8.18.0’s removal of Windows CE/CeGCC support and falls through to the
appropriate platform branches instead.
|
|
||
| #define appendnl(b) \ | ||
| curlx_dyn_addn(buf, "\n", 1) | ||
| #define appendnl(b) curlx_dyn_addn(buf, "\n", 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix unused macro parameter.
The appendnl macro declares a parameter (b) but ignores it, always using buf from the enclosing scope instead. This is misleading and could cause confusion.
♻️ Proposed fix
Option 1 (preferred): Use the parameter
-#define appendnl(b) curlx_dyn_addn(buf, "\n", 1)
+#define appendnl(b) curlx_dyn_addn((b), "\n", 1)Option 2: Remove the unused parameter
-#define appendnl(b) curlx_dyn_addn(buf, "\n", 1)
+#define appendnl() curlx_dyn_addn(buf, "\n", 1)And update the call site at line 63:
- return appendnl(buf);
+ return appendnl();📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #define appendnl(b) curlx_dyn_addn(buf, "\n", 1) | |
| #define appendnl(b) curlx_dyn_addn((b), "\n", 1) |
🤖 Prompt for AI Agents
In @deps/curl/lib/curl_get_line.c at line 31, The appendnl macro declares a
parameter b but ignores it and always uses buf; change the macro to use the
parameter (preferred) by redefining appendnl(b) as curlx_dyn_addn((b), "\n", 1)
and update all call sites to pass the buffer variable (e.g., buf) instead of
relying on the outer-scope buf, or alternatively remove the parameter by
redefining appendnl() to use buf and update call sites to call it with no
arguments; reference symbols: appendnl, curlx_dyn_addn, and the buffer variable
(buf).
| else | ||
| /* !checksrc! disable ERRNOVAR 1 */ | ||
| CURL_SETERRNO(EINVAL); | ||
| errno = EINVAL; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for CURL_SETERRNO definition
echo "=== CURL_SETERRNO macro definition ==="
rg -n -A5 '#define\s+CURL_SETERRNO' --type=c
echo ""
echo "=== Search for CURL_SETERRNO usage ==="
rg -n 'CURL_SETERRNO' --type=c
echo ""
echo "=== Other errno assignments in curlx ==="
rg -n 'errno\s*=' deps/curl/lib/curlx/ --type=c
echo ""
echo "=== Check for errno usage in other curl lib files ==="
rg -n 'errno\s*=' deps/curl/lib/*.c --type=c | head -20Repository: nodesource/nsolid
Length of output: 178
🌐 Web query:
CURL_SETERRNO macro curl library errno handling
💡 Result:
CURL_SETERRNO is a portability macro in libcurl (defined in curl_setup.h) that sets the C errno on platforms that have it and becomes a no-op on platforms that don’t (e.g. Windows CE). In upstream source it’s defined roughly as:
- on normal platforms: #define CURL_SETERRNO(x) (errno = (x))
- on UNDER_CE: #define CURL_SETERRNO(x) ((void)(x))
libcurl code uses CURL_SETERRNO(...) when it needs to record a local errno value portably (for example in Win32 wrappers or UTF-16 file API fallbacks). See the macro definition and examples in the curl source. [1][2]
Sources:
- curl_setup.h (macro definition). [1]
- Example usage in curlx code (curlx/multibyte.c). [2]
Revert errno assignments to use CURL_SETERRNO macro for platform portability.
The direct errno = EINVAL assignments (lines 324, 355, 393, 426) bypass the CURL_SETERRNO portability macro, which is required for cross-platform compatibility. CURL_SETERRNO is conditionally compiled to handle platforms that don't support errno (e.g., Windows CE) by becoming a no-op. Direct assignments will cause issues on those platforms. Use CURL_SETERRNO(EINVAL) instead to maintain the library's existing portability guarantees.
🤖 Prompt for AI Agents
In @deps/curl/lib/curlx/fopen.c at line 324, The code directly assigns errno =
EINVAL in fopen-related logic which breaks portability; replace those direct
assignments with the portability macro by calling CURL_SETERRNO(EINVAL) at each
occurrence (e.g., the sites currently using errno = EINVAL around fopen
handling) so platforms without errno support use the no-op implementation;
ensure you update all four occurrences that were flagged (the lines assigning
errno) to use CURL_SETERRNO(EINVAL) instead.
| #if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_COOKIES) || \ | ||
| !defined(CURL_DISABLE_ALTSVC) | ||
| /* rename() on Windows does not overwrite, so we cannot use it here. | ||
| MoveFileEx() will overwrite and is usually atomic, however it fails | ||
| when there are open handles to the file. */ | ||
| int curlx_win32_rename(const char *oldpath, const char *newpath) | ||
| { | ||
| int res = -1; /* fail */ | ||
|
|
||
| #ifdef UNICODE | ||
| TCHAR *tchar_oldpath = curlx_convert_UTF8_to_wchar(oldpath); | ||
| TCHAR *tchar_newpath = curlx_convert_UTF8_to_wchar(newpath); | ||
| #else | ||
| const TCHAR *tchar_oldpath = oldpath; | ||
| const TCHAR *tchar_newpath = newpath; | ||
| #endif | ||
|
|
||
| if(tchar_oldpath && tchar_newpath) { | ||
| const int max_wait_ms = 1000; | ||
| struct curltime start; | ||
|
|
||
| TCHAR *oldpath_fixed = NULL; | ||
| TCHAR *newpath_fixed = NULL; | ||
| const TCHAR *target_oldpath; | ||
| const TCHAR *target_newpath; | ||
|
|
||
| if(fix_excessive_path(tchar_oldpath, &oldpath_fixed)) | ||
| target_oldpath = oldpath_fixed; | ||
| else | ||
| target_oldpath = tchar_oldpath; | ||
|
|
||
| if(fix_excessive_path(tchar_newpath, &newpath_fixed)) | ||
| target_newpath = newpath_fixed; | ||
| else | ||
| target_newpath = tchar_newpath; | ||
|
|
||
| start = curlx_now(); | ||
|
|
||
| for(;;) { | ||
| timediff_t diff; | ||
| /* !checksrc! disable BANNEDFUNC 1 */ | ||
| if(MoveFileEx(target_oldpath, target_newpath, | ||
| MOVEFILE_REPLACE_EXISTING)) { | ||
| res = 0; /* success */ | ||
| break; | ||
| } | ||
| diff = curlx_timediff_ms(curlx_now(), start); | ||
| if(diff < 0 || diff > max_wait_ms) { | ||
| break; | ||
| } | ||
| Sleep(1); | ||
| } | ||
|
|
||
| CURLX_FREE(oldpath_fixed); | ||
| CURLX_FREE(newpath_fixed); | ||
| } | ||
|
|
||
| #ifdef UNICODE | ||
| curlx_free(tchar_oldpath); | ||
| curlx_free(tchar_newpath); | ||
| #endif | ||
|
|
||
| return res; | ||
| } | ||
| #endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review the retry logic in the rename operation.
The new curlx_win32_rename function implements retry logic for MoveFileEx, which can fail when the file has open handles. Several aspects need consideration:
-
Retry effectiveness: The 1ms sleep between retries may not provide sufficient time for other processes to close file handles. The comment acknowledges MoveFileEx fails with open handles, but retrying after 1ms doesn't guarantee those handles will be released.
-
Error reporting: The function doesn't preserve the original error from
MoveFileEx(e.g., viaGetLastError()→errno), making it difficult for callers to distinguish between different failure modes. -
Tight retry loop: With
Sleep(1)and up to 1000 attempts, this could consume CPU unnecessarily if the failure is not transient.
Suggested improvements
int curlx_win32_rename(const char *oldpath, const char *newpath)
{
int res = -1; /* fail */
+ DWORD last_error = 0;
/* ... conversion code ... */
for(;;) {
timediff_t diff;
/* !checksrc! disable BANNEDFUNC 1 */
if(MoveFileEx(target_oldpath, target_newpath,
MOVEFILE_REPLACE_EXISTING)) {
res = 0; /* success */
break;
}
+ last_error = GetLastError();
diff = curlx_timediff_ms(curlx_now(), start);
if(diff < 0 || diff > max_wait_ms) {
break;
}
- Sleep(1);
+ Sleep(10); /* Give more time for handles to be released */
}
+
+ /* Set errno based on the last Windows error */
+ if(res != 0 && last_error != 0) {
+ /* Map common errors, fall back to EACCES */
+ errno = (last_error == ERROR_ACCESS_DENIED) ? EACCES :
+ (last_error == ERROR_FILE_NOT_FOUND) ? ENOENT : EIO;
+ }🤖 Prompt for AI Agents
In @deps/curl/lib/curlx/fopen.c around lines 439 - 503, The retry loop in
curlx_win32_rename currently spins with Sleep(1) up to max_wait_ms and discards
MoveFileEx errors; update curlx_win32_rename to (1) capture the failing error
from MoveFileEx via GetLastError() each iteration and map/preserve it (set errno
appropriately) before returning so callers can distinguish failure reasons, (2)
back off the retry sleep to a more sensible strategy (e.g., exponential or
increasing sleeps up to a cap rather than fixed 1ms) to avoid CPU churn and give
other processes time to close handles, and (3) stop retrying immediately for
non-transient errors by checking the GetLastError() code (only retry on errors
that indicate temporary lock/deny conditions) while returning promptly for other
errors; reference curlx_win32_rename, MoveFileEx, max_wait_ms, Sleep,
GetLastError and errno mapping when making these changes.
| #ifdef USE_HTTTPS | ||
| if((type != CURL_DNS_TYPE_NS) && !d->numcname && !d->numaddr && | ||
| !d->numhttps_rrs) | ||
| !d->numhttps_rrs) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Search for both preprocessor directives
rg -n "USE_HTTTPS" --type c
rg -n "USE_HTTPSRR" --type cRepository: nodesource/nsolid
Length of output: 2609
🏁 Script executed:
# Also check the full context around line 844 in doh.c
sed -n '840,850p' deps/curl/lib/doh.cRepository: nodesource/nsolid
Length of output: 349
Fix typo in preprocessor directive on line 844.
#ifdef USE_HTTTPS should be #ifdef USE_HTTPSRR. The typo causes the conditional block to never execute as intended—when USE_HTTPSRR is defined, the preprocessor will skip the intended ifdef block and use the else branch instead, breaking the HTTPS RR logic.
🤖 Prompt for AI Agents
In @deps/curl/lib/doh.c around lines 844 - 846, The preprocessor macro in the
doh.c conditional is misspelled: change the #ifdef from USE_HTTTPS to the
correct macro USE_HTTPSRR so the HTTPS RR-specific branch surrounding the if
((type != CURL_DNS_TYPE_NS) && !d->numcname && !d->numaddr && !d->numhttps_rrs)
executes when HTTPS RR support is compiled in; update the macro name only (no
logic changes) wherever the incorrect USE_HTTTPS appears in this conditional
block so the intended branch is compiled.
| CURLcode Curl_doh(struct Curl_easy *data, const char *hostname, | ||
| int port, int ip_version); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
cat -n deps/curl/lib/doh.h | sed -n '115,190p'Repository: nodesource/nsolid
Length of output: 178
🌐 Web query:
curl doh.h Curl_doh function signature macro CURL_DISABLE_DOH
💡 Result:
Do you mean (A) the exact function declaration of Curl_doh in curl's doh.h for a specific curl version, or (B) what the CURL_DISABLE_DOH macro does and how it affects that function? If (A), please tell me which curl/libcurl version or commit you need and I’ll fetch the exact signature.
🌐 Web query:
site:github.com curl/curl doh.h Curl_doh 8.18.0
💡 Result:
I searched GitHub for doh.h / Curl_doh in the curl/curl repo and related results but did not find a doh.h file or a Curl_doh symbol in the curl/curl repository at the 8.18.0 area. Relevant hits:
- curl/doh (stand‑alone DoH client repository). [1]
- curl/curl issue and patch snippets referencing Curl_doh / doh.h in context (patch/gist). [2]
- curl/curl releases listing (no explicit doh.h in 8.17/8.18 tags shown). [3]
If you want, I can:
- search a specific curl tag (curl-8_18_0) tree for doh.h, or
- fetch the full curl/curl source at tag 8.18.0 and search it for Curl_doh/doh.h. Which would you prefer?
Sources:
[1] https://github.com/curl/doh.
[2] Gist / patch referencing doh.h and Curl_doh.
[3] https://github.com/curl/curl/releases.
🏁 Script executed:
find . -name "doh.h" -type f 2>/dev/null | head -20Repository: nodesource/nsolid
Length of output: 82
🏁 Script executed:
cat -n deps/curl/lib/doh.h | sed -n '115,190p'Repository: nodesource/nsolid
Length of output: 2604
🏁 Script executed:
rg -n "Curl_doh\s*\(" deps/curl/ --type c | head -50Repository: nodesource/nsolid
Length of output: 588
Macro parameter count does not match function signature.
The Curl_doh function signature (lines 119-120) takes 4 parameters: (struct Curl_easy *data, const char *hostname, int port, int ip_version). The disabled-DoH macro on line 183 incorrectly defines 5 parameters: Curl_doh(a, b, c, d, e). All callers (e.g., deps/curl/lib/hostip.c:873) pass 4 arguments, so when CURL_DISABLE_DOH is defined, the macro expansion will fail. Additionally, the macro returns NULL instead of a CURLcode error value.
Fix: Remove the extra parameter and change the return value to an appropriate error code (e.g., CURLE_COULDNT_RESOLVE_HOST).
🤖 Prompt for AI Agents
In @deps/curl/lib/doh.h around lines 119 - 120, The disabled-DoH macro for
Curl_doh is wrong: update the macro so its parameter list matches the function
signature Curl_doh(struct Curl_easy *data, const char *hostname, int port, int
ip_version) (remove the extra fifth parameter) and change its return from NULL
to an appropriate CURLcode such as CURLE_COULDNT_RESOLVE_HOST so callers that
expect a CURLcode compile and get a proper error value when CURL_DISABLE_DOH is
defined.
1218adf to
32bc5d8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
deps/curl/lib/dllmain.c (1)
33-62: Add version guard forOPENSSL_thread_stop()availability.Line 54 calls
OPENSSL_thread_stop()unconditionally underPREVENT_OPENSSL_MEMLEAK, but this function was introduced in OpenSSL 3.0.0. If curl supports OpenSSL versions earlier than 3.0, add a version guard (e.g.,#if OPENSSL_VERSION_NUMBER >= 0x30000000L) or document the minimum required OpenSSL version.deps/curl/lib/curl_sasl.c (1)
275-283: Add defensive NULL checks fordata->connbefore dereferencing.While all observed call sites guard this function with
Curl_sasl_can_authenticate()checks and connection initialization ensuresuseris set viacurlx_strdup()with error handling, the function dereferencesdata->conn->user[0]without verifying thatdata->connis non-NULL. Although the practical risk is low due to call site guards and state machine context, adding explicit NULL checks would improve defensive coding practices:if(!data || !data->conn || !data->conn->user || data->conn->user[0]) return TRUE;This ensures robustness against unexpected connection states and makes the code safer to refactor or reuse.
deps/curl/lib/conncache.h (1)
49-59: Initialize all struct cpool fields explicitly in Curl_cpool_init.The fields
num_conn,next_connection_id,next_easy_id,last_cleanup, andlockedare used without explicit initialization in Curl_cpool_init (lines 121-134 of conncache.c). While the code relies on the containing structures (Curl_multi, Curl_share) being allocated with calloc, explicit initialization is necessary for robustness and clarity:
num_connshould be initialized to 0next_connection_idandnext_easy_idshould be initialized to 0last_cleanupshould be initialized (e.g., to zero/current time)lockedbit should be explicitly set to 0Additionally, ensure Curl_cpool_destroy properly resets these fields to prevent stale state if a pool is reused.
deps/curl/lib/altsvc.c (1)
174-183: Don’t treat malformed alt-svc lines as OOM
altsvc_create()can return NULL for invalid ALPN/host inputs, not just allocation failure. ReturningCURLE_OUT_OF_MEMORYhere breaks the “ignore syntactical errors” contract and can abort loading on a bad line. Pre-validate inputs and only use OOM for allocation failure.🐛 Proposed fix
- as = altsvc_create(&srchost, &dsthost, &srcalpn, &dstalpn, - (size_t)srcport, (size_t)dstport); - if(as) { + enum alpnid srcid = Curl_str2alpnid(&srcalpn); + enum alpnid dstid = Curl_str2alpnid(&dstalpn); + if(!srcid || !dstid || + !curlx_strlen(&srchost) || !curlx_strlen(&dsthost)) + return CURLE_OK; /* malformed line, ignore */ + as = altsvc_createid(curlx_str(&srchost), curlx_strlen(&srchost), + curlx_str(&dsthost), curlx_strlen(&dsthost), + srcid, dstid, + (size_t)srcport, (size_t)dstport); + if(as) { as->expires = expires; as->prio = 0; /* not supported to just set zero */ as->persist = persist ? 1 : 0; Curl_llist_append(&asi->list, as, &as->node); } else return CURLE_OUT_OF_MEMORY;deps/curl/lib/cookie.c (1)
1315-1349: Ensureokayreflects whether any cookies matchedThe function documentation states: "'okay' is TRUE when there is a list returned." However,
*okayis set TRUE unconditionally, even whenmatches == 0and the list is empty. The single call site inhttp.c:2468checksif(!result && okay)before processing cookies, relying onokayto indicate whether the list contains results.Set
*okaybased on whether matches were found to align with documented behavior and call-site expectations:🐛 Proposed fix
- *okay = TRUE; - return CURLE_OK; /* success */ + *okay = (matches > 0); + return CURLE_OK; /* success */deps/curl/lib/asyn.h (1)
110-121: Update the Curl_async_getaddrinfo docblock in deps/curl/lib/asyn.h.The comment incorrectly describes an old API returning a hostent with a "fourth argument" for memory allocation. The current signature returns CURLcode with only four parameters. Update to reflect the async semantics:
✏️ Suggested doc update
- * Returns name information about the given hostname and port number. If - * successful, the 'hostent' is returned and the fourth argument will point to - * memory we need to free after use. That memory *MUST* be freed with - * Curl_freeaddrinfo(), nothing else. - * - * Each resolver backend must of course make sure to return data in the - * correct format to comply with this. + * Starts an async resolve for the given hostname and port. + * Returns CURLE_OK when the resolve is started successfully; results are + * retrieved via Curl_async_is_resolved/Curl_async_await.
🤖 Fix all issues with AI agents
In `@deps/curl/lib/curlx/base64.c`:
- Around line 61-63: The API change made curlx_base64_decode accept uint8_t
**outptr but callers still use unsigned char **; update all call sites (in
http_ntlm, curl_sasl, vtls, rustls, openssl, spnego_sspi, spnego_gssapi) to
declare and pass uint8_t * (or uint8_t **) variables (e.g., change unsigned char
*hdr / *msg / *der / *ech_config / *chlg to uint8_t *hdr etc.) so types match,
or alternatively revert curlx_base64_decode to unsigned char ** to preserve the
original API—apply the change consistently across all seven call sites and
ensure prototypes/headers are updated to the chosen type.
In `@deps/curl/lib/curlx/strerr.c`:
- Around line 270-275: The condition incorrectly negates strerror_s's return
value: strerror_s returns 0 on success, so the code currently treats successful
CRT messages as failure and falls through to
get_winsock_error/curlx_get_winapi_error and finally SNPRINTF; fix by changing
the check to test for strerror_s failure (non-zero) or an "Unknown error" result
(e.g., (strerror_s(buf, buflen, err) != 0 || !strcmp(buf, "Unknown error"))),
then only if that indicates failure attempt get_winsock_error/get_winapi and
finally SNPRINTF; update the conditional around strerror_s, get_winsock_error,
curlx_get_winapi_error and the SNPRINTF fallback to respect this corrected
logic.
In `@deps/curl/lib/doh.h`:
- Around line 115-120: The comment for Curl_doh is inaccurate: update the
docblock for Curl_doh() to state that the function returns a CURLcode
(indicating success or specific error), remove the incorrect claim that it
returns a Curl_addrinfo*, and briefly note that the resolved address info is not
returned directly by the function signature (so callers must check the
appropriate state or output mechanism used by Curl_doh).
In `@deps/curl/lib/easy.c`:
- Around line 1066-1075: Replace the direct free of outcurl->cookies with the
cookie cleanup API: when cleaning up after a duphandle failure in the block that
checks outcurl, call Curl_cookie_cleanup(outcurl) (or the appropriate per-handle
cookie cleanup function) instead of curlx_free(outcurl->cookies) so the internal
cookie state is properly cleared; keep the surrounding cleanup calls
(Curl_altsvc_cleanup, Curl_hsts_cleanup, Curl_freeset, curlx_free(outcurl))
intact and guard the change with the existing CURL_DISABLE_COOKIES conditional
compilation macro.
♻️ Duplicate comments (9)
deps/curl/lib/curl_get_line.c (1)
31-31: Fix unused macro parameter.
appendnl(b)ignoresband always usesbuf, which is misleading. Please update the macro to use the parameter or remove the parameter and update call sites accordingly.deps/curl/include/curl/system.h (1)
137-143: Windows CE support should be removed per libcurl 8.18.0 breaking changes.This issue was already flagged in a previous review. The UNDER_CE block should be deleted entirely rather than simplified, as libcurl 8.18.0 officially drops Windows CE / CeGCC support. Keeping this block contradicts the upstream decision.
deps/curl/lib/curlx/fopen.c (5)
319-324: Direct errno assignment bypasses portability macro.The direct
errno = EINVALassignment at line 324 was previously flagged. This bypasses theCURL_SETERRNOportability macro required for cross-platform compatibility on platforms without errno support.
337-368: LGTM overall, with one duplicate concern.The function correctly handles Unicode/non-Unicode paths with proper memory cleanup. The direct
errno = EINVALat line 355 was previously flagged for portability concerns.
375-406: LGTM overall, with one duplicate concern.The function correctly wraps freopen with Unicode support and includes a MinGW compatibility declaration. The direct
errno = EINVALat line 393 was previously flagged for portability concerns.
408-437: Inconsistent UTF-8 conversion function usage.This function uses
curlx_convert_UTF8_to_wchar(line 415) andcurlx_free(line 422), while nearby functions usefn_convert_UTF8_to_wcharandCURLX_FREE. This inconsistency should be unified for maintainability.The direct
errno = EINVALat line 426 was previously flagged.
439-503: Retry logic concerns previously flagged.The retry logic with 1ms sleep intervals and lack of error preservation via
GetLastError()was previously flagged for review. The current implementation may spin unnecessarily for non-transient errors and doesn't provide callers with meaningful error codes.deps/curl/lib/doh.h (1)
182-185: CURL_DISABLE_DOH macro signature/return still mismatches Curl_doh.
This repeats the earlier issue: the stub takes 5 args and returnsNULL, but the function now returnsCURLcodeand takes 4 args. This will break builds whenCURL_DISABLE_DOHis defined.🐛 Proposed fix
-#define Curl_doh(a, b, c, d, e) NULL +#define Curl_doh(a, b, c, d) CURLE_COULDNT_RESOLVE_HOSTdeps/curl/lib/doh.c (1)
844-846: Fix typo in preprocessor directive on line 844.
#ifdef USE_HTTTPSshould be#ifdef USE_HTTPSRR. The typo causes the conditional block to never execute as intended—whenUSE_HTTPSRRis defined, the preprocessor will skip the intended ifdef block and use the else branch instead, breaking the HTTPS RR logic.
🧹 Nitpick comments (2)
deps/curl/lib/curlx/fopen.c (2)
66-75: Inconsistent flags between MultiByteToWideChar calls.The first call uses
MB_ERR_INVALID_CHARSfor strict validation, but the second call uses0, which allows invalid characters to be replaced silently. If the first call succeeds, using0on the second call is safe, but for consistency and clarity, consider using the same flag for both calls.♻️ Suggested improvement
- if(MultiByteToWideChar(CP_UTF8, 0, + if(MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str_utf8, -1, str_w, str_w_len) == 0) {
253-294: Consider unifying UTF-8 to wchar conversion functions for consistency.This function uses
curlx_convert_UTF8_to_wchar(line 265), while other file I/O functions in this file (curlx_fopen,curlx_open,curlx_freopen) usefn_convert_UTF8_to_wchar(e.g., lines 304, 344). Both conversion functions use different allocators:curlx_convert_UTF8_to_wcharusescurlx_mallocwhilefn_convert_UTF8_to_wcharusesCURLX_MALLOC. The current code correctly pairs each allocator with its corresponding free function, but the split adds maintenance complexity with two parallel implementations doing the same conversion.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (215)
deps/curl/curl.gypdeps/curl/include/Makefile.indeps/curl/include/curl/Makefile.indeps/curl/include/curl/curl.hdeps/curl/include/curl/curlver.hdeps/curl/include/curl/easy.hdeps/curl/include/curl/header.hdeps/curl/include/curl/multi.hdeps/curl/include/curl/options.hdeps/curl/include/curl/system.hdeps/curl/include/curl/typecheck-gcc.hdeps/curl/include/curl/urlapi.hdeps/curl/include/curl/websockets.hdeps/curl/lib/CMakeLists.txtdeps/curl/lib/Makefile.amdeps/curl/lib/Makefile.indeps/curl/lib/Makefile.incdeps/curl/lib/altsvc.cdeps/curl/lib/altsvc.hdeps/curl/lib/amigaos.cdeps/curl/lib/amigaos.hdeps/curl/lib/arpa_telnet.hdeps/curl/lib/asyn-ares.cdeps/curl/lib/asyn-base.cdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/asyn.hdeps/curl/lib/bufq.cdeps/curl/lib/bufq.hdeps/curl/lib/bufref.cdeps/curl/lib/bufref.hdeps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-h1-proxy.hdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-h2-proxy.hdeps/curl/lib/cf-haproxy.cdeps/curl/lib/cf-haproxy.hdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-https-connect.hdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/cf-ip-happy.hdeps/curl/lib/cf-socket.cdeps/curl/lib/cf-socket.hdeps/curl/lib/cfilters.cdeps/curl/lib/cfilters.hdeps/curl/lib/config-os400.hdeps/curl/lib/config-plan9.hdeps/curl/lib/config-win32.hdeps/curl/lib/conncache.cdeps/curl/lib/conncache.hdeps/curl/lib/connect.cdeps/curl/lib/connect.hdeps/curl/lib/content_encoding.cdeps/curl/lib/content_encoding.hdeps/curl/lib/cookie.cdeps/curl/lib/cookie.hdeps/curl/lib/cshutdn.cdeps/curl/lib/cshutdn.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_config-cmake.h.indeps/curl/lib/curl_config.h.indeps/curl/lib/curl_ctype.hdeps/curl/lib/curl_endian.cdeps/curl/lib/curl_fnmatch.cdeps/curl/lib/curl_fnmatch.hdeps/curl/lib/curl_fopen.cdeps/curl/lib/curl_fopen.hdeps/curl/lib/curl_get_line.cdeps/curl/lib/curl_get_line.hdeps/curl/lib/curl_gethostname.cdeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_gssapi.hdeps/curl/lib/curl_hmac.hdeps/curl/lib/curl_ldap.hdeps/curl/lib/curl_md4.hdeps/curl/lib/curl_memory.hdeps/curl/lib/curl_memrchr.cdeps/curl/lib/curl_memrchr.hdeps/curl/lib/curl_ntlm_core.cdeps/curl/lib/curl_ntlm_core.hdeps/curl/lib/curl_range.cdeps/curl/lib/curl_range.hdeps/curl/lib/curl_rtmp.cdeps/curl/lib/curl_sasl.cdeps/curl/lib/curl_sasl.hdeps/curl/lib/curl_setup.hdeps/curl/lib/curl_setup_once.hdeps/curl/lib/curl_sha256.hdeps/curl/lib/curl_sha512_256.cdeps/curl/lib/curl_sha512_256.hdeps/curl/lib/curl_share.cdeps/curl/lib/curl_share.hdeps/curl/lib/curl_sspi.cdeps/curl/lib/curl_sspi.hdeps/curl/lib/curl_threads.cdeps/curl/lib/curl_trc.cdeps/curl/lib/curl_trc.hdeps/curl/lib/curlx/base64.cdeps/curl/lib/curlx/base64.hdeps/curl/lib/curlx/binmode.hdeps/curl/lib/curlx/curlx.hdeps/curl/lib/curlx/dynbuf.cdeps/curl/lib/curlx/dynbuf.hdeps/curl/lib/curlx/fopen.cdeps/curl/lib/curlx/fopen.hdeps/curl/lib/curlx/inet_ntop.cdeps/curl/lib/curlx/inet_ntop.hdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curlx/inet_pton.hdeps/curl/lib/curlx/multibyte.cdeps/curl/lib/curlx/multibyte.hdeps/curl/lib/curlx/nonblock.cdeps/curl/lib/curlx/nonblock.hdeps/curl/lib/curlx/snprintf.hdeps/curl/lib/curlx/strcopy.cdeps/curl/lib/curlx/strcopy.hdeps/curl/lib/curlx/strerr.cdeps/curl/lib/curlx/strparse.cdeps/curl/lib/curlx/strparse.hdeps/curl/lib/curlx/timediff.cdeps/curl/lib/curlx/timediff.hdeps/curl/lib/curlx/timeval.cdeps/curl/lib/curlx/timeval.hdeps/curl/lib/curlx/version_win32.cdeps/curl/lib/curlx/version_win32.hdeps/curl/lib/curlx/wait.cdeps/curl/lib/curlx/wait.hdeps/curl/lib/curlx/warnless.cdeps/curl/lib/curlx/warnless.hdeps/curl/lib/curlx/winapi.cdeps/curl/lib/cw-out.cdeps/curl/lib/cw-out.hdeps/curl/lib/cw-pause.cdeps/curl/lib/cw-pause.hdeps/curl/lib/dict.cdeps/curl/lib/dict.hdeps/curl/lib/dllmain.cdeps/curl/lib/doh.cdeps/curl/lib/doh.hdeps/curl/lib/dynhds.cdeps/curl/lib/dynhds.hdeps/curl/lib/easy.cdeps/curl/lib/easy_lock.hdeps/curl/lib/easygetopt.cdeps/curl/lib/easyif.hdeps/curl/lib/easyoptions.cdeps/curl/lib/easyoptions.hdeps/curl/lib/escape.cdeps/curl/lib/escape.hdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/fake_addrinfo.hdeps/curl/lib/file.cdeps/curl/lib/file.hdeps/curl/lib/fileinfo.cdeps/curl/lib/fileinfo.hdeps/curl/lib/formdata.cdeps/curl/lib/formdata.hdeps/curl/lib/ftp.cdeps/curl/lib/ftp.hdeps/curl/lib/ftplistparser.cdeps/curl/lib/ftplistparser.hdeps/curl/lib/functypes.hdeps/curl/lib/getenv.cdeps/curl/lib/getinfo.cdeps/curl/lib/getinfo.hdeps/curl/lib/gopher.cdeps/curl/lib/gopher.hdeps/curl/lib/hash.cdeps/curl/lib/hash.hdeps/curl/lib/headers.cdeps/curl/lib/headers.hdeps/curl/lib/hmac.cdeps/curl/lib/hostip.cdeps/curl/lib/hostip.hdeps/curl/lib/hostip4.cdeps/curl/lib/hostip6.cdeps/curl/lib/hsts.cdeps/curl/lib/hsts.hdeps/curl/lib/http.cdeps/curl/lib/http.hdeps/curl/lib/http1.cdeps/curl/lib/http1.hdeps/curl/lib/http2.cdeps/curl/lib/http2.hdeps/curl/lib/http_aws_sigv4.cdeps/curl/lib/http_aws_sigv4.hdeps/curl/lib/http_chunks.cdeps/curl/lib/http_chunks.hdeps/curl/lib/http_digest.cdeps/curl/lib/http_negotiate.cdeps/curl/lib/http_negotiate.hdeps/curl/lib/http_ntlm.cdeps/curl/lib/http_ntlm.hdeps/curl/lib/http_proxy.cdeps/curl/lib/http_proxy.hdeps/curl/lib/httpsrr.cdeps/curl/lib/httpsrr.hdeps/curl/lib/idn.cdeps/curl/lib/idn.hdeps/curl/lib/if2ip.cdeps/curl/lib/if2ip.hdeps/curl/lib/imap.cdeps/curl/lib/imap.hdeps/curl/lib/ldap.cdeps/curl/lib/llist.cdeps/curl/lib/llist.hdeps/curl/lib/macos.cdeps/curl/lib/macos.hdeps/curl/lib/md4.cdeps/curl/lib/md5.cdeps/curl/lib/memdebug.cdeps/curl/lib/memdebug.hdeps/curl/lib/mime.cdeps/curl/lib/mime.hdeps/curl/lib/mprintf.c
💤 Files with no reviewable changes (22)
- deps/curl/lib/curl_fopen.h
- deps/curl/lib/escape.h
- deps/curl/lib/dynhds.h
- deps/curl/lib/curl_md4.h
- deps/curl/lib/curlx/wait.h
- deps/curl/lib/curlx/nonblock.h
- deps/curl/lib/cshutdn.h
- deps/curl/lib/curl_sasl.h
- deps/curl/lib/cf-h1-proxy.h
- deps/curl/lib/dict.h
- deps/curl/lib/curlx/timediff.h
- deps/curl/lib/curl_get_line.h
- deps/curl/lib/file.h
- deps/curl/lib/easyif.h
- deps/curl/lib/curlx/version_win32.h
- deps/curl/lib/cf-https-connect.h
- deps/curl/lib/curl_memory.h
- deps/curl/lib/cf-h2-proxy.h
- deps/curl/lib/curl_endian.c
- deps/curl/lib/curl_sspi.h
- deps/curl/lib/curl_hmac.h
- deps/curl/lib/curl_fnmatch.h
🚧 Files skipped from review as they are similar to previous changes (37)
- deps/curl/include/curl/options.h
- deps/curl/lib/fake_addrinfo.h
- deps/curl/lib/curlx/version_win32.c
- deps/curl/lib/curl_range.h
- deps/curl/include/curl/header.h
- deps/curl/lib/cw-pause.c
- deps/curl/lib/curlx/inet_pton.h
- deps/curl/lib/curlx/strcopy.c
- deps/curl/lib/curlx/nonblock.c
- deps/curl/lib/content_encoding.h
- deps/curl/lib/curlx/binmode.h
- deps/curl/lib/curlx/strcopy.h
- deps/curl/lib/curl_sspi.c
- deps/curl/include/curl/websockets.h
- deps/curl/include/curl/typecheck-gcc.h
- deps/curl/lib/curlx/warnless.h
- deps/curl/lib/arpa_telnet.h
- deps/curl/lib/curl_memrchr.h
- deps/curl/lib/cfilters.h
- deps/curl/lib/curlx/base64.h
- deps/curl/lib/cf-ip-happy.h
- deps/curl/include/curl/Makefile.in
- deps/curl/lib/escape.c
- deps/curl/include/curl/urlapi.h
- deps/curl/lib/curl_threads.c
- deps/curl/lib/curl_ntlm_core.h
- deps/curl/lib/curlx/inet_ntop.h
- deps/curl/lib/easyoptions.h
- deps/curl/lib/curlx/timeval.h
- deps/curl/lib/curlx/timediff.c
- deps/curl/lib/curl_sha512_256.h
- deps/curl/lib/easygetopt.c
- deps/curl/lib/fileinfo.c
- deps/curl/include/Makefile.in
- deps/curl/lib/curl_memrchr.c
- deps/curl/lib/bufref.c
- deps/curl/include/curl/multi.h
🧰 Additional context used
🧠 Learnings (69)
📚 Learning: 2025-12-03T14:35:32.707Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:32.707Z
Learning: Applies to deps/grpc/src/core/util/**/*.{cc,h,cpp} : Use string manipulation functions from `string.h` and `string.cc`
Applied to files:
deps/curl/lib/curlx/strerr.cdeps/curl/lib/curlx/strparse.cdeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_gethostname.cdeps/curl/lib/curlx/strparse.h
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/hpack_{encoder,parser}.{h,cc} : Implement HPACK (header compression algorithm as per RFC 7541) in the CHTTP2 transport to compress headers of gRPC requests and responses
Applied to files:
deps/curl/lib/cf-haproxy.hdeps/curl/lib/content_encoding.cdeps/curl/lib/cf-haproxy.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/hpack*.{h,cc} : HPACK header compression/decompression must comply with RFC 7541 specifications
Applied to files:
deps/curl/lib/cf-haproxy.hdeps/curl/lib/cf-haproxy.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:32:52.516Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/iomgr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:52.516Z
Learning: Use `grpc_pollset` abstraction to efficiently monitor file descriptors for I/O events across multiple file descriptors
Applied to files:
deps/curl/lib/cshutdn.c
📚 Learning: 2025-12-03T14:35:32.707Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:32.707Z
Learning: Applies to deps/grpc/src/core/util/**/*.{cc,h,cpp} : Use time-related functions from `time.h` and `time.cc`
Applied to files:
deps/curl/lib/config-os400.hdeps/curl/lib/curlx/timeval.c
📚 Learning: 2025-12-03T14:29:08.569Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:08.569Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/{alts_credentials.h,alts_credentials.cc} : Implement credentials for ALTS transport security in `alts_credentials.h` / `alts_credentials.cc`
Applied to files:
deps/curl/lib/altsvc.hdeps/curl/lib/altsvc.c
📚 Learning: 2025-12-03T14:29:05.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:05.695Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/alts_credentials.{h,cc} : Use ALTS (Application Layer Transport Security) credentials to configure ALTS security for the transport
Applied to files:
deps/curl/lib/altsvc.hdeps/curl/lib/altsvc.c
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/*address*.{h,cc} : Design address utility functions to be efficient and avoid common pitfalls when working with network addresses
Applied to files:
deps/curl/lib/curlx/warnless.cdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/cf-socket.cdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/config-win32.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:31:59.979Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:59.979Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/*sockaddr_utils.{h,cc} : Work with `sockaddr` structures using functions from `sockaddr_utils.h`/`sockaddr_utils.cc`, including converting to/from string representations and comparing for equality
Applied to files:
deps/curl/lib/curlx/warnless.cdeps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/connect.cdeps/curl/lib/cf-socket.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/cf-socket.cdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_setup.hdeps/curl/lib/config-win32.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace_flags.yaml : Add new trace flags as entries in the `trace_flags.yaml` file with the flag name and a brief description of what it does
Applied to files:
deps/curl/lib/curl_trc.cdeps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/security/**/*.{h,cc} : Implement security handshakers responsible for performing TLS and ALTS handshakes in the security/ subdirectory
Applied to files:
deps/curl/lib/Makefile.incdeps/curl/curl.gyp
📚 Learning: 2025-12-03T14:35:21.897Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/tsi/ssl/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:21.897Z
Learning: Applies to deps/grpc/src/core/tsi/ssl/**/*.{c,cc,cpp,h,hpp} : Keep OpenSSL up-to-date to ensure that gRPC applications are secure
Applied to files:
deps/curl/lib/Makefile.incdeps/curl/lib/curl_sha512_256.cdeps/curl/curl.gypdeps/curl/lib/curl_config.h.indeps/curl/lib/curl_gssapi.cdeps/curl/lib/curl_ntlm_core.c
📚 Learning: 2025-12-03T14:29:08.569Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:08.569Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/{tls_credentials.h,tls_credentials.cc} : Implement credentials for TLS transport security in `tls_credentials.h` / `tls_credentials.cc`
Applied to files:
deps/curl/lib/Makefile.incdeps/curl/lib/curl_gssapi.c
📚 Learning: 2025-12-03T14:29:05.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:05.695Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/tls_credentials.{h,cc} : Use TLS (Transport Layer Security) credentials to configure TLS security for the Chttp2 transport
Applied to files:
deps/curl/lib/Makefile.incdeps/curl/lib/cf-https-connect.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/writing.cc : CHTTP2 writing operations must handle writing data to the wire using writing.cc
Applied to files:
deps/curl/lib/cw-out.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:54.774Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:54.774Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/sockaddr_utils.{h,cc} : Use `sockaddr_utils.h` / `sockaddr_utils.cc` for working with `sockaddr` structures, including converting them to/from string representations and comparing them for equality
Applied to files:
deps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/connect.cdeps/curl/lib/cf-socket.hdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/cf-socket.cdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_setup.hdeps/curl/lib/config-win32.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/{sockaddr_utils.h,sockaddr_utils.cc} : Use `sockaddr_utils.h` and `sockaddr_utils.cc` for working with `sockaddr` structures, including converting them to and from string representations, and comparing them for equality
Applied to files:
deps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/connect.cdeps/curl/lib/cf-socket.hdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curl_setup.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:31:54.774Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:54.774Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/parse_address.{h,cc} : Use `parse_address.h` / `parse_address.cc` for parsing string representations of network addresses into `grpc_resolved_address` structures
Applied to files:
deps/curl/lib/curlx/inet_pton.cdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/curl_addrinfo.c
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/c_ares/**/*.{c,cc,cpp,h,hpp} : Use c-ares library for DNS resolution implementations in the c_ares subdirectory
Applied to files:
deps/curl/curl.gypdeps/curl/lib/curl_addrinfo.hdeps/curl/lib/asyn.hdeps/curl/lib/curl_config.h.indeps/curl/lib/asyn-thrdd.cdeps/curl/lib/doh.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/amigaos.cdeps/curl/lib/asyn-ares.cdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/asyn-base.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:31:58.078Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:58.078Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/{parse_address.h,parse_address.cc} : Use `parse_address.h` and `parse_address.cc` for parsing string representations of network addresses into `grpc_resolved_address` structures
Applied to files:
deps/curl/lib/curl_addrinfo.h
📚 Learning: 2025-12-03T14:34:02.613Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:02.613Z
Learning: Applies to deps/grpc/src/core/resolver/sockaddr/**/*.{h,cc} : Use socket address lists for name resolution when implementing the sockaddr resolver plugin
Applied to files:
deps/curl/lib/curl_addrinfo.hdeps/curl/lib/cf-socket.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/fake_addrinfo.cdeps/curl/lib/curl_addrinfo.cdeps/curl/lib/curl_setup.hdeps/curl/lib/config-win32.hdeps/curl/lib/curlx/inet_ntop.c
📚 Learning: 2025-12-03T14:31:59.979Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/address_utils/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:59.979Z
Learning: Applies to deps/grpc/src/core/lib/address_utils/**/*parse_address.{h,cc} : Parse string representations of network addresses into `grpc_resolved_address` structures using functions from `parse_address.h`/`parse_address.cc`
Applied to files:
deps/curl/lib/curl_addrinfo.h
📚 Learning: 2025-12-03T14:31:41.247Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:41.247Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : The HTTP CONNECT handshaker implementation should be in `http_connect_handshaker.cc` for establishing connections to target servers through HTTP proxies
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/*.{h,cc} : Implement the HTTP CONNECT handshaker in the http_connect/ subdirectory
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/connect.hdeps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : HTTP CONNECT handshaker implementation should be contained in `http_connect_handshaker.cc`
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: The HTTP CONNECT handshaker is responsible for establishing connections to target servers through HTTP proxies supporting the CONNECT method
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:31:36.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:36.421Z
Learning: Applies to deps/grpc/src/core/handshaker/http_connect/**/http_connect_handshaker.cc : HTTP CONNECT handshaker implementation should be placed in `http_connect_handshaker.cc`
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/chttp2_transport.{h,cc} : Support HTTP/2 stream multiplexing over a single TCP connection for high performance and low latency in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/curl_setup.h
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/client/chttp2_connector.{h,cc} : Implement the client-side connector responsible for creating new CHTTP2 transport instances
Applied to files:
deps/curl/lib/cf-h1-proxy.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:31:36.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:36.421Z
Learning: HTTP CONNECT handshaker should be used in conjunction with security handshakers, such as the TLS handshaker, to establish secure connections to target servers
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:31:35.695Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/http_connect/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:35.695Z
Learning: HTTP CONNECT handshaker should be used in conjunction with security handshakers (such as TLS handshaker) to establish secure connections to target servers
Applied to files:
deps/curl/lib/cf-h1-proxy.c
📚 Learning: 2025-12-03T14:34:02.613Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:02.613Z
Learning: Applies to deps/grpc/src/core/resolver/dns/**/*.{h,cc} : Use DNS for name resolution when implementing the DNS resolver plugin
Applied to files:
deps/curl/include/curl/curl.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/doh.cdeps/curl/lib/doh.hdeps/curl/lib/asyn-base.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/alpn/**/*.{h,cc} : Implement ALPN (Application-Layer Protocol Negotiation) for selecting the HTTP/2 protocol during the TLS handshake
Applied to files:
deps/curl/lib/connect.cdeps/curl/lib/connect.hdeps/curl/lib/altsvc.cdeps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/alpn/*.{h,cc} : ALPN (Application-Layer Protocol Negotiation) code must be used to select the HTTP/2 protocol during TLS handshake in alpn/ directory
Applied to files:
deps/curl/lib/connect.cdeps/curl/lib/connect.hdeps/curl/lib/altsvc.cdeps/curl/lib/cf-https-connect.c
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use the `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use the `GRPC_TRACE_FLAG_ENABLED(tracer)` macro to check if a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:26.248Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:26.248Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/trace*.{h,cc} : Use `GRPC_TRACE_DLOG(tracer, level)` macro to log trace messages in debug builds when a trace flag is enabled in gRPC core code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use `GRPC_TRACE_LOG(tracer, level)` macro to log trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:24.501Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:24.501Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,h} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:32:27.692Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/debug/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:27.692Z
Learning: Applies to deps/grpc/src/core/lib/debug/**/*.{cc,cpp,cxx,c,h,hpp} : Use `GRPC_TRACE_VLOG(tracer, level)` macro to log verbose trace messages when a trace flag is enabled in gRPC C++ code
Applied to files:
deps/curl/lib/curl_trc.h
📚 Learning: 2025-12-03T14:33:59.671Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:33:59.671Z
Learning: Choose the appropriate DNS resolver implementation (c-ares, EventEngine, or native OS resolver) based on your application's performance requirements
Applied to files:
deps/curl/lib/asyn.hdeps/curl/lib/asyn-thrdd.cdeps/curl/lib/asyn-ares.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:35:34.369Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:34.369Z
Learning: Applies to deps/grpc/src/core/util/src/**/host_port.{h,cc} : Host and port string manipulation utilities should be implemented in `host_port.h` and `host_port.cc`
Applied to files:
deps/curl/lib/cf-socket.h
📚 Learning: 2025-12-03T14:34:28.190Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/sockaddr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:28.190Z
Learning: Applies to deps/grpc/src/core/resolver/sockaddr/**/sockaddr_resolver.{h,cc} : Implement the `Resolver` interface for name resolution in sockaddr_resolver.h / sockaddr_resolver.cc
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:34:21.252Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/sockaddr/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:21.252Z
Learning: Use sockaddr resolver implementation for name resolution from a list of socket addresses
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/native/**/*.{c,cc,cpp,h,hpp} : Use native operating system DNS resolver for DNS resolution implementations in the native subdirectory
Applied to files:
deps/curl/lib/asyn-thrdd.cdeps/curl/lib/doh.cdeps/curl/lib/config-win32.h
📚 Learning: 2025-12-03T14:34:07.310Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/resolver/dns/GEMINI.md:0-0
Timestamp: 2025-12-03T14:34:07.310Z
Learning: Applies to deps/grpc/src/core/resolver/dns/event_engine/**/*.{c,cc,cpp,h,hpp} : Use EventEngine for DNS resolution implementations in the event_engine subdirectory
Applied to files:
deps/curl/lib/asyn-thrdd.c
📚 Learning: 2025-12-03T14:35:35.065Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:35.065Z
Learning: Applies to deps/grpc/src/core/util/src/core/util/time.{h,cc} : Time-related functions should be implemented in dedicated header and implementation files (time.h / time.cc)
Applied to files:
deps/curl/lib/curlx/timeval.c
📚 Learning: 2025-12-03T14:35:34.369Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/util/GEMINI.md:0-0
Timestamp: 2025-12-03T14:35:34.369Z
Learning: Applies to deps/grpc/src/core/util/src/**/time.{h,cc} : Time-related functions should be implemented in `time.h` and `time.cc`
Applied to files:
deps/curl/lib/curlx/timeval.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/{chttp2_transport,frame}.{h,cc} : Implement logic for parsing and serializing HTTP/2 frames in the CHTTP2 transport core
Applied to files:
deps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:30.011Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/handshaker/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:30.011Z
Learning: Applies to deps/grpc/src/core/handshaker/tcp_connect/**/*.{h,cc} : Implement a basic handshaker for TCP connections in the tcp_connect/ subdirectory
Applied to files:
deps/curl/lib/cf-https-connect.cdeps/curl/lib/cf-socket.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2025-12-03T14:29:08.569Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/transport/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:08.569Z
Learning: Applies to deps/grpc/src/core/credentials/transport/**/{xds_credentials.h,xds_credentials.cc} : Implement credentials for XDS transport security in `xds_credentials.h` / `xds_credentials.cc`
Applied to files:
deps/curl/lib/curl_gssapi.c
📚 Learning: 2025-12-03T14:28:57.122Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/credentials/call/GEMINI.md:0-0
Timestamp: 2025-12-03T14:28:57.122Z
Learning: Applies to deps/grpc/src/core/credentials/call/**/call_creds_util.{h,cc} : Use utility functions from `call_creds_util.h` / `call_creds_util.cc` for working with call credentials
Applied to files:
deps/curl/lib/curl_gssapi.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Any changes to PH2 code must be accompanied by relevant tests in test/core/transport/chttp2/ directory, ensuring existing tests in http2_client_transport_test.cc and http2_server_transport_test.cc pass
Applied to files:
deps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/writable_streams.{h,cc} : PH2 writable stream tracking must use writable_streams.{h,cc} to track streams with available data and flow control tokens
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/stream.h : PH2 stream representation must use the Stream class defined in stream.h for managing HTTP2 stream state and operations
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Support all features of HTTP/2, including multiplexing, flow control, and header compression, in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/http2_status.h : PH2 error handling must use http2_status.h custom error types to distinguish between Stream and Connection level errors
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/chttp2_transport.{h,cc} : CHTTP2 transport implementation must use combiner for concurrency management as defined in lib/iomgr/combiner.h
Applied to files:
deps/curl/lib/cf-h2-proxy.cdeps/curl/lib/cf-ip-happy.cdeps/curl/lib/curl_setup.h
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/flow_control.{h,cc} : Implement both stream-level and connection-level flow control in the CHTTP2 transport to prevent overconsumption of memory and ensure fair bandwidth distribution
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: When implementing features in PH2 transport, always first check the CHTTP2 implementation in this directory for reference and use the mapping provided in 'Key classes in CHTTP2 and their PH2 equivalents' section
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:31:00.865Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2025-12-03T14:31:00.865Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/transport/frame.{h,cc} : Implement C++ classes to represent different types of HTTP/2 frames in the CHTTP2 transport
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2026-01-16T10:44:52.116Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chttp2/GEMINI.md:0-0
Timestamp: 2026-01-16T10:44:52.116Z
Learning: Applies to deps/grpc/src/core/ext/transport/chttp2/**/frame*.{h,cc} : HTTP/2 transport implementation must parse and serialize HTTP/2 frames (HEADERS, DATA, SETTINGS, PING, GOAWAY, WINDOW_UPDATE, RST_STREAM, CONTINUATION) in compliance with RFC 9113
Applied to files:
deps/curl/lib/cf-h2-proxy.c
📚 Learning: 2025-12-03T14:32:10.553Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/lib/channel/GEMINI.md:0-0
Timestamp: 2025-12-03T14:32:10.553Z
Learning: Applies to deps/grpc/src/core/lib/channel/**/{promise_based_filter,connected_channel}.{h,cc} : When implementing new channel filters or transport-based channels, prefer promise-based implementations over legacy callback-based implementations as part of the migration to the new promise-based architecture.
Applied to files:
deps/curl/lib/cf-socket.cdeps/curl/lib/cfilters.c
📚 Learning: 2025-12-03T14:29:25.191Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/filters/channel_idle/GEMINI.md:0-0
Timestamp: 2025-12-03T14:29:25.191Z
Learning: Applies to deps/grpc/src/core/ext/filters/channel_idle/**/*channel*filter*.{h,cc} : Use the 'legacy' prefix in class names to indicate that filters are based on the older channel filter API and will likely be replaced by a more modern implementation in the future
Applied to files:
deps/curl/lib/cf-socket.c
📚 Learning: 2025-12-03T14:30:51.421Z
Learnt from: CR
Repo: nodesource/nsolid PR: 0
File: deps/grpc/src/core/ext/transport/chaotic_good/GEMINI.md:0-0
Timestamp: 2025-12-03T14:30:51.421Z
Learning: Applies to deps/grpc/src/core/ext/transport/chaotic_good/**/chaotic_good/client_transport.{h,cc} : Implement client-side transport logic in `client_transport.h` and `client_transport.cc`
Applied to files:
deps/curl/lib/cf-ip-happy.c
🪛 Cppcheck (2.19.0)
deps/curl/lib/curlx/warnless.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/cf-h1-proxy.c
[error] 390-390: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
deps/curl/lib/curlx/timeval.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/conncache.c
[error] 375-375: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
deps/curl/lib/cookie.c
[error] 1436-1436: There is an unknown macro here somewhere. Configuration is required. If CURL_FORMAT_CURL_OFF_T is a macro then please configure it.
(unknownMacro)
deps/curl/lib/amigaos.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/curl_fopen.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/curlx/inet_ntop.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
deps/curl/lib/easyoptions.c
[error] 118-118: failed to evaluate #if condition, undefined function-like macro invocation
(syntaxError)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
- GitHub Check: lint-js-and-md
- GitHub Check: test-linux (ubuntu-24.04)
- GitHub Check: test-linux (ubuntu-24.04-arm)
- GitHub Check: test-macOS
- GitHub Check: build-tarball
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| CURLcode curlx_base64_decode(const char *src, | ||
| unsigned char **outptr, size_t *outlen) | ||
| uint8_t **outptr, size_t *outlen) | ||
| { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# First, let's examine the actual function definition
echo "=== Function definition in base64.c ==="
sed -n '61,65p' deps/curl/lib/curlx/base64.c
# Find all calls to curlx_base64_decode
echo -e "\n=== All calls to curlx_base64_decode ==="
rg -n "curlx_base64_decode" --type c -B2 -A2
# Check if there's a function declaration in a header
echo -e "\n=== Header files defining curlx_base64_decode ==="
fd -e h | xargs grep -l "curlx_base64_decode" 2>/dev/nullRepository: nodesource/nsolid
Length of output: 3841
🏁 Script executed:
#!/bin/bash
# Let's also check the memory wrapper changes mentioned
echo "=== Lines 99-101 (malloc change) ==="
sed -n '99,101p' deps/curl/lib/curlx/base64.c
echo -e "\n=== Lines 161-162 (free change) ==="
sed -n '161,162p' deps/curl/lib/curlx/base64.c
# Check the variable declarations to see if outptr is indeed used with uint8_t
echo -e "\n=== Full context around function signature ==="
sed -n '61,75p' deps/curl/lib/curlx/base64.cRepository: nodesource/nsolid
Length of output: 666
🏁 Script executed:
#!/bin/bash
# Check the variable types in each caller file
echo "=== http_ntlm.c - hdr variable ==="
sed -n '60,75p' deps/curl/lib/http_ntlm.c | grep -E "(uint8_t|unsigned char|^\s*\w+\s+\*?hdr)"
echo -e "\n=== curl_sasl.c - msg variable ==="
sed -n '225,240p' deps/curl/lib/curl_sasl.c | grep -E "(uint8_t|unsigned char|^\s*\w+\s+\*?msg)"
echo -e "\n=== vtls.c - der variable ==="
sed -n '725,740p' deps/curl/lib/vtls/vtls.c | grep -E "(uint8_t|unsigned char|der)"
echo -e "\n=== rustls.c - ech_config variable ==="
sed -n '940,960p' deps/curl/lib/vtls/rustls.c | grep -E "(uint8_t|unsigned char|ech_config)"
echo -e "\n=== openssl.c - ech_config variable ==="
sed -n '3460,3475p' deps/curl/lib/vtls/openssl.c | grep -E "(uint8_t|unsigned char|ech_config)"
echo -e "\n=== spnego_sspi.c - chlg variable ==="
sed -n '165,180p' deps/curl/lib/vauth/spnego_sspi.c | grep -E "(uint8_t|unsigned char|chlg)"
echo -e "\n=== spnego_gssapi.c - chlg variable ==="
sed -n '125,140p' deps/curl/lib/vauth/spnego_gssapi.c | grep -E "(uint8_t|unsigned char|chlg)"Repository: nodesource/nsolid
Length of output: 961
🏁 Script executed:
#!/bin/bash
# More thorough search for variable declarations in each file
echo "=== http_ntlm.c - hdr declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?hdr\b" deps/curl/lib/http_ntlm.c -A1 -B1
echo -e "\n=== curl_sasl.c - msg declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?msg\b" deps/curl/lib/curl_sasl.c -A1 -B1
echo -e "\n=== vtls.c - der declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?der\b" deps/curl/lib/vtls/vtls.c -A1 -B1
echo -e "\n=== rustls.c - ech_config declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?ech_config\b" deps/curl/lib/vtls/rustls.c -A1 -B1
echo -e "\n=== openssl.c - ech_config declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?ech_config\b" deps/curl/lib/vtls/openssl.c -A1 -B1
echo -e "\n=== spnego_sspi.c - chlg declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?chlg\b" deps/curl/lib/vauth/spnego_sspi.c -A1 -B1
echo -e "\n=== spnego_gssapi.c - chlg declaration ==="
rg -n "^\s*(uint8_t|unsigned char).*\*?chlg\b" deps/curl/lib/vauth/spnego_gssapi.c -A1 -B1Repository: nodesource/nsolid
Length of output: 1061
API signature change not properly propagated to all callers.
The function signature was changed to uint8_t **outptr, but all 7 callers still declare and pass unsigned char ** variables:
http_ntlm.cline 71:unsigned char *hdrcurl_sasl.cline 230:unsigned char *msgvtls.cline 690:unsigned char **derrustls.cline 914:unsigned char *ech_configopenssl.cline 3445:unsigned char *ech_configspnego_sspi.cline 90:unsigned char *chlgspnego_gssapi.cline 82:unsigned char *chlg
Either update all callers to use uint8_t ** to match the new signature, or revert the function signature to unsigned char ** for backward compatibility. While uint8_t and unsigned char are typically equivalent, the API change introduces a type mismatch that should be resolved consistently across all call sites.
🤖 Prompt for AI Agents
In `@deps/curl/lib/curlx/base64.c` around lines 61 - 63, The API change made
curlx_base64_decode accept uint8_t **outptr but callers still use unsigned char
**; update all call sites (in http_ntlm, curl_sasl, vtls, rustls, openssl,
spnego_sspi, spnego_gssapi) to declare and pass uint8_t * (or uint8_t **)
variables (e.g., change unsigned char *hdr / *msg / *der / *ech_config / *chlg
to uint8_t *hdr etc.) so types match, or alternatively revert
curlx_base64_decode to unsigned char ** to preserve the original API—apply the
change consistently across all seven call sites and ensure prototypes/headers
are updated to the chosen type.
| if((!strerror_s(buf, buflen, err) || !strcmp(buf, "Unknown error")) && | ||
| #ifdef USE_WINSOCK | ||
| !get_winsock_error(err, buf, buflen) && | ||
| !get_winsock_error(err, buf, buflen) && | ||
| #endif | ||
| !curlx_get_winapi_error((DWORD)err, buf, buflen)) | ||
| SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err); | ||
| } | ||
| !curlx_get_winapi_error((DWORD)err, buf, buflen)) | ||
| SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, find the exact file and examine the context around lines 270-275
find . -name "strerr.c" -type f | grep curlRepository: nodesource/nsolid
Length of output: 91
🏁 Script executed:
# Get more context around those lines
head -n 280 deps/curl/lib/curlx/strerr.c | tail -n 20Repository: nodesource/nsolid
Length of output: 581
🏁 Script executed:
# Also check lines before to understand the full function
head -n 300 deps/curl/lib/curlx/strerr.c | tail -n 40Repository: nodesource/nsolid
Length of output: 1387
🌐 Web query:
strerror_s Windows CRT return value errno_t success
💡 Result:
strerror_s returns an errno_t: it returns 0 on success and a non‑zero error code on failure (runtime‑constraint or other error). [1][2]
Notes:
- errno_t is (per C11 Annex K and common CRTs) a typedef for int. [2][3]
Sources:
[1] Microsoft strerror_s documentation (return value: "Zero if successful, an error code on failure").
[2] C11/CRT docs (errno_t is a typedef for int; bounds‑checked functions return errno_t and 0 on success).
Fix Windows strerror fallback gating.
strerror_s returns 0 on success and non-zero on failure. The current !strerror_s(...) condition incorrectly evaluates to true when a valid CRT message is produced, causing the Winsock/WinAPI fallbacks and final SNPRINTF to execute even on success, overwriting the valid error message.
Proposed fix
- if((!strerror_s(buf, buflen, err) || !strcmp(buf, "Unknown error")) &&
+ if((strerror_s(buf, buflen, err) || !strcmp(buf, "Unknown error")) &&
`#ifdef` USE_WINSOCK
!get_winsock_error(err, buf, buflen) &&
`#endif`
!curlx_get_winapi_error((DWORD)err, buf, buflen))
SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if((!strerror_s(buf, buflen, err) || !strcmp(buf, "Unknown error")) && | |
| #ifdef USE_WINSOCK | |
| !get_winsock_error(err, buf, buflen) && | |
| !get_winsock_error(err, buf, buflen) && | |
| #endif | |
| !curlx_get_winapi_error((DWORD)err, buf, buflen)) | |
| SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err); | |
| } | |
| !curlx_get_winapi_error((DWORD)err, buf, buflen)) | |
| SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err); | |
| if((strerror_s(buf, buflen, err) || !strcmp(buf, "Unknown error")) && | |
| `#ifdef` USE_WINSOCK | |
| !get_winsock_error(err, buf, buflen) && | |
| `#endif` | |
| !curlx_get_winapi_error((DWORD)err, buf, buflen)) | |
| SNPRINTF(buf, buflen, "Unknown error %d (%#x)", err, err); |
🤖 Prompt for AI Agents
In `@deps/curl/lib/curlx/strerr.c` around lines 270 - 275, The condition
incorrectly negates strerror_s's return value: strerror_s returns 0 on success,
so the code currently treats successful CRT messages as failure and falls
through to get_winsock_error/curlx_get_winapi_error and finally SNPRINTF; fix by
changing the check to test for strerror_s failure (non-zero) or an "Unknown
error" result (e.g., (strerror_s(buf, buflen, err) != 0 || !strcmp(buf, "Unknown
error"))), then only if that indicates failure attempt
get_winsock_error/get_winapi and finally SNPRINTF; update the conditional around
strerror_s, get_winsock_error, curlx_get_winapi_error and the SNPRINTF fallback
to respect this corrected logic.
| * Curl_doh() starts a name resolve using DoH (DNS-over-HTTPS). It resolves a | ||
| * name and returns a 'Curl_addrinfo *' with the address information. | ||
| */ | ||
|
|
||
| struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, | ||
| const char *hostname, | ||
| int port, | ||
| int ip_version, | ||
| int *waitp); | ||
| CURLcode Curl_doh(struct Curl_easy *data, const char *hostname, | ||
| int port, int ip_version); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
cat -n deps/curl/lib/doh.h | sed -n '110,125p'Repository: nodesource/nsolid
Length of output: 614
Update the Curl_doh comment to match the actual return type.
The comment on line 116 states the function returns Curl_addrinfo *, but the signature returns CURLcode.
Suggested fix
- * name and returns a 'Curl_addrinfo *' with the address information.
+ * name and returns a CURLcode indicating success or failure.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| * Curl_doh() starts a name resolve using DoH (DNS-over-HTTPS). It resolves a | |
| * name and returns a 'Curl_addrinfo *' with the address information. | |
| */ | |
| struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, | |
| const char *hostname, | |
| int port, | |
| int ip_version, | |
| int *waitp); | |
| CURLcode Curl_doh(struct Curl_easy *data, const char *hostname, | |
| int port, int ip_version); | |
| * Curl_doh() starts a name resolve using DoH (DNS-over-HTTPS). It resolves a | |
| * name and returns a CURLcode indicating success or failure. | |
| */ | |
| CURLcode Curl_doh(struct Curl_easy *data, const char *hostname, | |
| int port, int ip_version); |
🤖 Prompt for AI Agents
In `@deps/curl/lib/doh.h` around lines 115 - 120, The comment for Curl_doh is
inaccurate: update the docblock for Curl_doh() to state that the function
returns a CURLcode (indicating success or specific error), remove the incorrect
claim that it returns a Curl_addrinfo*, and briefly note that the resolved
address info is not returned directly by the function signature (so callers must
check the appropriate state or output mechanism used by Curl_doh).
| if(outcurl) { | ||
| #ifndef CURL_DISABLE_COOKIES | ||
| free(outcurl->cookies); | ||
| curlx_free(outcurl->cookies); | ||
| #endif | ||
| curlx_dyn_free(&outcurl->state.headerb); | ||
| Curl_altsvc_cleanup(&outcurl->asi); | ||
| Curl_hsts_cleanup(&outcurl->hsts); | ||
| Curl_freeset(outcurl); | ||
| free(outcurl); | ||
| curlx_free(outcurl); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Search for cookie cleanup function definitions
rg -n 'Curl_cookie_cleanup\s*\(' deps/curl/lib/ -A 5Repository: nodesource/nsolid
Length of output: 2982
🏁 Script executed:
# Search for cookie initialization/cleanup patterns
rg -n 'Curl_cookie_(init|cleanup)' deps/curl/lib/ -B 1 -A 1Repository: nodesource/nsolid
Length of output: 3363
🏁 Script executed:
# Check what curlx_free does with cookies in other contexts
rg -n 'curlx_free.*cookie' deps/curl/lib/ -B 2 -A 2Repository: nodesource/nsolid
Length of output: 920
🏁 Script executed:
# Check the function name and context around line 1066
sed -n '950,1100p' deps/curl/lib/easy.c | head -80Repository: nodesource/nsolid
Length of output: 2552
🏁 Script executed:
# Find the fail label and cleanup code
sed -n '1066,1150p' deps/curl/lib/easy.c | cat -nRepository: nodesource/nsolid
Length of output: 3156
Use Curl_cookie_cleanup for duphandle failure cleanup.
On failure, outcurl->cookies should be released via the cookie cleanup API to avoid skipping internal cookie state cleanup. Curl_cookie_cleanup() properly calls Curl_cookie_clearall() before freeing the structure, whereas direct curlx_free() omits this step.
🛠️ Suggested fix
- curlx_free(outcurl->cookies);
+ Curl_cookie_cleanup(outcurl->cookies);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if(outcurl) { | |
| #ifndef CURL_DISABLE_COOKIES | |
| free(outcurl->cookies); | |
| curlx_free(outcurl->cookies); | |
| #endif | |
| curlx_dyn_free(&outcurl->state.headerb); | |
| Curl_altsvc_cleanup(&outcurl->asi); | |
| Curl_hsts_cleanup(&outcurl->hsts); | |
| Curl_freeset(outcurl); | |
| free(outcurl); | |
| curlx_free(outcurl); | |
| } | |
| if(outcurl) { | |
| `#ifndef` CURL_DISABLE_COOKIES | |
| Curl_cookie_cleanup(outcurl->cookies); | |
| `#endif` | |
| curlx_dyn_free(&outcurl->state.headerb); | |
| Curl_altsvc_cleanup(&outcurl->asi); | |
| Curl_hsts_cleanup(&outcurl->hsts); | |
| Curl_freeset(outcurl); | |
| curlx_free(outcurl); | |
| } |
🤖 Prompt for AI Agents
In `@deps/curl/lib/easy.c` around lines 1066 - 1075, Replace the direct free of
outcurl->cookies with the cookie cleanup API: when cleaning up after a duphandle
failure in the block that checks outcurl, call Curl_cookie_cleanup(outcurl) (or
the appropriate per-handle cookie cleanup function) instead of
curlx_free(outcurl->cookies) so the internal cookie state is properly cleared;
keep the surrounding cleanup calls (Curl_altsvc_cleanup, Curl_hsts_cleanup,
Curl_freeset, curlx_free(outcurl)) intact and guard the change with the existing
CURL_DISABLE_COOKIES conditional compilation macro.
Summary by CodeRabbit
New Features
Bug Fixes
Improvements
✏️ Tip: You can customize this high-level summary in your review settings.