On Mon, Jul 31, 2023 at 08:18:30AM +0200, Daniel Stenberg wrote: > On Sun, 30 Jul 2023, Richard W.M. Jones via curl-library wrote: > > >#0 stream_recv (cf=cf@entry=0x7fe0542a7260, data=data@entry=0x7fdd78001010, > > buf=buf@entry=0x7fe05423ce80 "", len=len@entry=16384, > > err=err@entry=0x7fe062a52824) at ../../lib/http2.c:1742 > >#1 0x00007fe0632f58db in cf_h2_recv (cf=0x7fe0542a7260, data=0x7fdd78001010, > > buf=0x7fe05423ce80 "", len=16384, err=0x7fe062a52824) > > at ../../lib/http2.c:1844 > > In this function cf_h2_recv(), is 'stream' NULL by any chance when > stream_recv() is called?
Looks like it, yes: (gdb) frame 1 #1 0x00007f7840ab28db in cf_h2_recv (cf=0x7f7830327670, data=0x7f7500000d10, buf=0x7f78302b42a0 "", len=16384, err=0x7f7840219824) at ../../lib/http2.c:1844 1844 nread = stream_recv(cf, data, buf, len, err); (gdb) print *cf $1 = {cft = 0x7f7840b1e4c0 <Curl_cft_nghttp2>, next = 0x7f78302a1f40, ctx = 0x7f7830327590, conn = 0x7f78302a1950, sockindex = 0, connected = 1} (gdb) print stream $2 = (struct stream_ctx *) 0x0 I've copied and pasted the whole of the 'data' struct below, but the important bits are: (gdb) print data->req.p.http $4 = (struct HTTP *) 0x7f78302b8930 (gdb) print ((struct HTTP *)data->req.p.http)->h2_ctx $5 = (void *) 0x0 (gdb) print *data->req.p.http $6 = {sendit = 0x0, postsize = 0, postdata = 0x0, p_pragma = 0x0, form = { parent = 0x0, nextpart = 0x0, kind = MIMEKIND_NONE, flags = 0, data = 0x0, readfunc = 0x0, seekfunc = 0x0, freefunc = 0x0, arg = 0x0, fp = 0x0, curlheaders = 0x0, userheaders = 0x0, mimetype = 0x0, filename = 0x0, name = 0x0, datasize = 0, state = {state = MIMESTATE_BEGIN, ptr = 0x0, offset = 0}, encoder = 0x0, encstate = {pos = 0, bufbeg = 0, bufend = 0, buf = '\000' <repeats 255 times>}, lastreadstatus = 1}, backup = { fread_func = 0x0, fread_in = 0x0, postdata = 0x0, postsize = 0, data = 0x0}, sending = HTTPSEND_BODY, h2_ctx = 0x0, h3_ctx = 0x0, send_buffer = {bufr = 0x0, leng = 0, allc = 0, toobig = 0}} which seems wrong? Rich. ====================================================================== (gdb) print *data $3 = {magic = 3235830701, id = 120, next = 0x7f754c000d10, prev = 0x7f76d4000d10, conn = 0x7f78302a1950, connect_queue = {ptr = 0x0, prev = 0x0, next = 0x0}, conn_queue = {ptr = 0x7f7500000d10, prev = 0x0, next = 0x7f754c000d50}, mstate = MSTATE_PERFORMING, result = CURLE_OK, msg = {list = {ptr = 0x0, prev = 0x0, next = 0x0}, extmsg = { msg = CURLMSG_NONE, easy_handle = 0x0, data = {whatever = 0x0, result = CURLE_OK}}}, sockets = {0, 0, 0, 0, 0}, actions = "\000\000\000\000", numsocks = 0, dns = { hostcache = 0x560efbd2fe80, hostcachetype = HCACHE_MULTI}, multi = 0x560efbd2fde0, multi_easy = 0x0, share = 0x0, psl = 0x560efbd2feb0, req = {size = -1, maxdownload = -1, bytecount = 0, writebytecount = 0, headerbytecount = 0, deductheadercount = 0, pendingheader = 0, start = { tv_sec = 2969402, tv_usec = 155892}, badheader = HEADER_NORMAL, headerline = 0, str = 0x0, offset = 0, httpcode = 0, keepon = 1, start100 = {tv_sec = 0, tv_usec = 0}, exp100 = EXP100_SEND_DATA, upgr101 = UPGR101_H2, writer_stack = 0x0, timeofdoc = 0, bodywrites = 0, location = 0x0, newurl = 0x0, upload_present = 0, upload_fromhere = 0x0, p = {file = 0x7f78302b8930, ftp = 0x7f78302b8930, http = 0x7f78302b8930, imap = 0x7f78302b8930, ldap = 0x7f78302b8930, mqtt = 0x7f78302b8930, pop3 = 0x7f78302b8930, rtsp = 0x7f78302b8930, smb = 0x7f78302b8930, smtp = 0x7f78302b8930, ssh = 0x7f78302b8930, telnet = 0x7f78302b8930}, doh = 0x0, setcookies = 0 '\000', writer_stack_depth = 0 '\000', header = 1, content_range = 0, upload_done = 1, ignorebody = 0, http_bodyless = 0, chunk = 0, ignore_cl = 0, upload_chunky = 0, getheader = 1, forbidchunk = 0, no_body = 0}, set = { err = 0x7f78412394e0 <_IO_2_1_stderr_>, debugdata = 0x0, errorbuffer = 0x7f7500000bd8 "", out = 0x7f7500000bd0, in_set = 0x7f78412388e0 <_IO_2_1_stdin_>, writeheader = 0x0, use_port = 0, httpauth = 1, proxyauth = 1, maxredirs = -1, postfields = 0x0, seek_func = 0x0, postfieldsize = -1, localport = 0, localportrange = 0, fwrite_func = 0x7f78416f3ef0 <write_cb>, fwrite_header = 0x0, fwrite_rtp = 0x0, fread_func_set = 0x7f7841079bc0 <__GI__IO_fread>, fprogress = 0x0, fxferinfo = 0x0, fdebug = 0x0, ioctl_func = 0x0, fsockopt = 0x0, sockopt_client = 0x0, fopensocket = 0x0, opensocket_client = 0x0, fclosesocket = 0x0, closesocket_client = 0x0, fprereq = 0x0, prereq_userp = 0x0, seek_client = 0x0, cookielist = 0x0, hstslist = 0x0, hsts_read = 0x0, hsts_read_userp = 0x0, hsts_write = 0x0, hsts_write_userp = 0x0, progress_client = 0x0, ioctl_client = 0x0, timeout = 0, connecttimeout = 0, happy_eyeballs_timeout = 200, server_response_timeout = 0, maxage_conn = 118, maxlifetime_conn = 0, tftp_blksize = 0, filesize = -1, low_speed_limit = 0, low_speed_time = 0, max_send_speed = 0, max_recv_speed = 0, set_resume_from = 0, headers = 0x0, httppost = 0x0, mimepost = {parent = 0x0, nextpart = 0x0, kind = MIMEKIND_NONE, flags = 0, data = 0x0, readfunc = 0x0, seekfunc = 0x0, freefunc = 0x0, arg = 0x0, fp = 0x0, curlheaders = 0x0, userheaders = 0x0, mimetype = 0x0, filename = 0x0, name = 0x0, datasize = 0, state = {state = MIMESTATE_BEGIN, ptr = 0x0, offset = 0}, encoder = 0x0, encstate = {pos = 0, bufbeg = 0, bufend = 0, buf = '\000' <repeats 255 times>}, lastreadstatus = 1}, telnet_options = 0x0, resolve = 0x0, connect_to = 0x0, timevalue = 0, timecondition = 0 '\000', method = 0 '\000', httpwant = 3 '\003', ssl = { primary = {CApath = 0x0, --Type <RET> for more, q to quit, c to continue without paging--c CAfile = 0x7f7500002240 "/etc/pki/tls/certs/ca-bundle.crt", issuercert = 0x0, clientcert = 0x0, cipher_list = 0x0, cipher_list13 = 0x0, pinned_key = 0x0, CRLfile = 0x0, cert_blob = 0x0, ca_info_blob = 0x0, issuercert_blob = 0x0, username = 0x0, password = 0x0, curves = 0x0, ssl_options = 0 '\000', version_max = 0, version = 0 '\000', verifypeer = 1, verifyhost = 1, verifystatus = 0, sessionid = 1}, certverifyresult = 0, fsslctx = 0x0, fsslctxp = 0x0, cert_type = 0x0, key = 0x0, key_blob = 0x0, key_type = 0x0, key_passwd = 0x0, certinfo = 0, falsestart = 0, enable_beast = 0, no_revoke = 0, no_partialchain = 0, revoke_best_effort = 0, native_ca_store = 0, auto_client_cert = 0}, proxy_ssl = {primary = { CApath = 0x0, CAfile = 0x7f7500002270 "/etc/pki/tls/certs/ca-bundle.crt", issuercert = 0x0, clientcert = 0x0, cipher_list = 0x0, cipher_list13 = 0x0, pinned_key = 0x0, CRLfile = 0x0, cert_blob = 0x0, ca_info_blob = 0x0, issuercert_blob = 0x0, username = 0x0, password = 0x0, curves = 0x0, ssl_options = 0 '\000', version_max = 0, version = 0 '\000', verifypeer = 1, verifyhost = 1, verifystatus = 0, sessionid = 1}, certverifyresult = 0, fsslctx = 0x0, fsslctxp = 0x0, cert_type = 0x0, key = 0x0, key_blob = 0x0, key_type = 0x0, key_passwd = 0x0, certinfo = 0, falsestart = 0, enable_beast = 0, no_revoke = 0, no_partialchain = 0, revoke_best_effort = 0, native_ca_store = 0, auto_client_cert = 0}, proxyheaders = 0x0, proxyport = 0, proxytype = 0 '\000', socks5auth = 5 '\005', general_ssl = { max_ssl_sessions = 5, ca_cache_timeout = 86400}, dns_cache_timeout = 60, buffer_size = 16384, upload_buffer_size = 65536, private_data = 0x0, http200aliases = 0x0, ipver = 0 '\000', max_filesize = 0, ftp_filemethod = 1 '\001', ftpsslauth = 0 '\000', ftp_ccc = 0 '\000', accepttimeout = 0, quote = 0x0, postquote = 0x0, prequote = 0x0, ftp_create_missing_dirs = 0 '\000', ssh_keyfunc = 0x0, ssh_keyfunc_userp = 0x0, ssh_auth_types = -1, new_directory_perms = 493, use_netrc = 0 '\000', new_file_perms = 420, str = {0x0 <repeats 23 times>, 0x7f7564001cb0 "1343750144-1344012288", 0x0, 0x7f75000022a0 "http://dev3.home.annexia.org/html/fedora-36.qcow2", 0x0, 0x0, 0x7f7500002240 "/etc/pki/tls/certs/ca-bundle.crt", 0x7f7500002270 "/etc/pki/tls/certs/ca-bundle.crt", 0x0 <repeats 50 times>}, blobs = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, scope_id = 0, allowed_protocols = 4294967295, redir_protocols = 15, mime_options = 0, rtp_out = 0x0, rtspreq = RTSPREQ_OPTIONS, chunk_bgn = 0x0, chunk_end = 0x0, fnmatch = 0x0, fnmatch_data = 0x0, wildcardptr = 0x0, gssapi_delegation = 0 '\000', tcp_keepidle = 60, tcp_keepintvl = 60, maxconnects = 5, expect_100_timeout = 1000, priority = {parent = 0x0, children = 0x0, weight = 0, exclusive = 0}, resolver_start = 0x0, resolver_start_client = 0x0, upkeep_interval_ms = 60000, fmultidone = 0x0, dohfor = 0x0, uh = 0x0, trailer_data = 0x0, trailer_callback = 0x0, keep_post = 0 '\000', mail_rcpt = 0x0, mail_rcpt_allowfails = 0, use_ssl = 0 '\000', connect_only = 0 '\000', is_fread_set = 0, tftp_no_options = 0, sep_headers = 1, cookiesession = 0, crlf = 0, ssh_compression = 0, quick_exit = 0, get_filetime = 0, tunnel_thru_httpproxy = 0, prefer_ascii = 0, remote_append = 0, list_only = 0, ftp_use_port = 0, ftp_use_epsv = 1, ftp_use_eprt = 1, ftp_use_pret = 0, ftp_skip_ip = 1, wildcard_enabled = 0, hide_progress = 1, http_fail_on_error = 1, http_keep_sending_on_error = 0, http_follow_location = 1, http_transfer_encoding = 0, allow_auth_to_other_hosts = 0, include_header = 0, http_set_referer = 0, http_auto_referer = 1, opt_no_body = 0, verbose = 0, krb = 0, reuse_forbid = 0, reuse_fresh = 0, no_signal = 1, tcp_nodelay = 1, ignorecl = 0, http_te_skip = 0, http_ce_skip = 0, proxy_transfer_mode = 0, socks5_gssapi_nec = 0, sasl_ir = 0, tcp_keepalive = 0, tcp_fastopen = 0, ssl_enable_alpn = 1, path_as_is = 0, pipewait = 0, suppress_connect_headers = 0, dns_shuffle_addresses = 0, haproxyprotocol = 0, abstract_unix_socket = 0, disallow_username_in_url = 0, doh = 0, doh_verifypeer = 1, doh_verifyhost = 1, doh_verifystatus = 0, http09_allowed = 0}, cookies = 0x0, hsts = 0x0, asi = 0x0, progress = {lastshow = 2969402, size_dl = 0, size_ul = 0, downloaded = 0, uploaded = 0, current_speed = 0, width = 0, flags = 48, timespent = 1001, dlspeed = 0, ulspeed = 0, t_nslookup = 0, t_connect = 0, t_appconnect = 0, t_pretransfer = 10, t_starttransfer = 0, t_redirect = 0, start = {tv_sec = 2969402, tv_usec = 155886}, t_startsingle = {tv_sec = 2969402, tv_usec = 155887}, t_startop = {tv_sec = 2969402, tv_usec = 155886}, t_acceptdata = { tv_sec = 0, tv_usec = 0}, ul_limit_start = {tv_sec = 2969402, tv_usec = 155886}, ul_limit_size = 0, dl_limit_start = { tv_sec = 2969402, tv_usec = 155886}, dl_limit_size = 0, speeder = {0, 0, 0, 0, 0, 0}, speeder_time = {{tv_sec = 2969402, tv_usec = 155892}, { tv_sec = 0, tv_usec = 0}, {tv_sec = 0, tv_usec = 0}, {tv_sec = 0, tv_usec = 0}, {tv_sec = 0, tv_usec = 0}, {tv_sec = 0, tv_usec = 0}}, speeder_c = 1, callback = 0, is_t_startransfer_set = 0}, state = { conn_cache = 0x560efbd2ff08, keeps_speed = {tv_sec = 0, tv_usec = 0}, lastconnect_id = -1, recent_conn_id = -1, headerb = {bufr = 0x0, leng = 0, allc = 0, toobig = 102400}, buffer = 0x7f78302b42a0 "", ulbuf = 0x0, current_speed = -1, first_host = 0x7f783029cde0 "dev3.home.annexia.org", first_remote_port = 80, first_remote_protocol = 1, retrycount = 0, session = 0x7f78302b3f00, sessionage = 1, tempwrite = {{b = {bufr = 0x0, leng = 0, allc = 0, toobig = 0}, type = 0}, {b = {bufr = 0x0, leng = 0, allc = 0, toobig = 0}, type = 0}, {b = {bufr = 0x0, leng = 0, allc = 0, toobig = 0}, type = 0}}, tempcount = 0, os_errno = 0, scratch = 0x0, followlocation = 0, requests = 0, prev_signal = 0x0, digest = {nonce = 0x0, cnonce = 0x0, realm = 0x0, opaque = 0x0, qop = 0x0, algorithm = 0x0, nc = 0, algo = 0 '\000', stale = 0, userhash = 0}, proxydigest = {nonce = 0x0, cnonce = 0x0, realm = 0x0, opaque = 0x0, qop = 0x0, algorithm = 0x0, nc = 0, algo = 0 '\000', stale = 0, userhash = 0}, authhost = {want = 1, picked = 0, avail = 0, done = 1, multipass = 0, iestyle = 0}, authproxy = {want = 1, picked = 0, avail = 0, done = 1, multipass = 0, iestyle = 0}, async = {hostname = 0x0, dns = 0x0, tdata = 0x0, resolver = 0x7f7500002220, port = 0, status = 0, done = 0}, engine = 0x0, expiretime = {tv_sec = 0, tv_usec = 0}, timenode = { smaller = 0x0, larger = 0x7f755c001bc8, samen = 0x7f7500001bc8, samep = 0x7f7500001bc8, key = {tv_sec = 2969402, tv_usec = 155727}, payload = 0x7f7500000d10}, timeoutlist = {head = 0x0, tail = 0x0, dtor = 0x0, size = 0}, expires = {{list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 2969402, tv_usec = 155727}, eid = EXPIRE_RUN_NOW}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = { ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}, {list = {ptr = 0x0, prev = 0x0, next = 0x0}, time = {tv_sec = 0, tv_usec = 0}, eid = EXPIRE_100_TIMEOUT}}, most_recent_ftp_entrypath = 0x0, prev_block_had_trailing_cr = 0, crlf_conversions = 0, range = 0x7f783029d120 "1343750144-1344012288", resume_from = 0, rtsp_next_client_CSeq = 0, rtsp_next_server_CSeq = 0, rtsp_CSeq_recv = 0, rtp_channel_mask = '\000' <repeats 31 times>, infilesize = 0, priority = { parent = 0x0, children = 0x0, weight = 0, exclusive = 0}, fread_func = 0x7f7841079bc0 <__GI__IO_fread>, in = 0x7f78412388e0 <_IO_2_1_stdin_>, uh = 0x7f78302b3e40, up = { scheme = 0x7f78302b3dd0 "http", hostname = 0x7f78302a7560 "dev3.home.annexia.org", port = 0x7f78302b88a0 "80", user = 0x0, password = 0x0, options = 0x0, path = 0x7f78302b88c0 "/html/fedora-36.qcow2", query = 0x0}, url = 0x7f78302ace20 "http://dev3.home.annexia.org/html/fedora-36.qcow2", referer = 0x0, resolve = 0x0, trailers_bytes_sent = 0, trailers_buf = { bufr = 0x0, leng = 0, allc = 0, toobig = 0}, httphdrs = {head = 0x0, tail = 0x0, dtor = 0x0, size = 0}, headerout = {{name = 0x0, value = 0x0, amount = 0, index = 0, origin = 0, anchor = 0x0}, { name = 0x0, value = 0x0, amount = 0, index = 0, origin = 0, anchor = 0x0}}, prevhead = 0x0, trailers_state = TRAILERS_NONE, aptr = {proxyuserpwd = 0x0, uagent = 0x0, accept_encoding = 0x0, userpwd = 0x0, rangeline = 0x7f78302b8ba0 "Range: bytes=1343750144-1344012288\r\n", ref = 0x0, host = 0x7f78302b8b70 "Host: dev3.home.annexia.org\r\n", cookiehost = 0x0, rtsp_transport = 0x0, te = 0x0, user = 0x0, passwd = 0x0, proxyuser = 0x0, proxypasswd = 0x0}, httpwant = 3 '\003', httpversion = 0 '\000', httpreq = 0 '\000', dselect_bits = 0 '\000', multi_owned_by_easy = 0, this_is_a_follow = 0, refused_stream = 0, errorbuf = 0, allow_port = 1, authproblem = 0, wildcardmatch = 0, expect100header = 0, disableexpect = 0, use_range = 1, rangestringalloc = 1, done = 0, previouslypending = 0, cookie_engine = 0, prefer_ascii = 0, list_only = 0, url_alloc = 1, referer_alloc = 0, wildcard_resolve = 0, rewindbeforesend = 0, upload = 0}, wildcard = 0x0, info = {httpcode = 0, httpproxycode = 0, httpversion = 0, filetime = -1, header_size = 0, request_size = 209, proxyauthavail = 0, httpauthavail = 0, numconnects = 0, contenttype = 0x0, wouldredirect = 0x0, retry_after = 0, conn_primary_ip = "192.168.0.220", '\000' <repeats 32 times>, conn_primary_port = 80, conn_remote_port = 80, conn_local_ip = "192.168.0.140", '\000' <repeats 32 times>, conn_local_port = 53600, conn_scheme = 0x7f7840b04605 "HTTP", conn_protocol = 1, certs = {num_of_certs = 0, certinfo = 0x0}, pxcode = CURLPX_OK, timecond = 0}, tsi = {backend = CURLSSLBACKEND_NONE, internals = 0x0}} -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org -- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html