Closed Bug 798873 Opened 13 years ago Closed 13 years ago

Crash in SDP formatted with too many ICE candidates - 'Assertion failure: endbuf_p - *ptr > 0' [@ sdp_build_attribute]

Categories

(Core :: WebRTC: Signaling, defect)

x86
macOS
defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla18
Tracking Status
firefox18 --- fixed
firefox19 --- fixed

People

(Reporter: ekr, Assigned: ehugg)

References

Details

(Keywords: crash, Whiteboard: [WebRTC], [blocking-webrtc+], [blocking-gum+], [qa-])

Attachments

(4 files, 8 obsolete files)

5.41 KB, patch
ekr
: review+
jesup
: review+
Details | Diff | Splinter Review
143.64 KB, patch
jesup
: review+
Details | Diff | Splinter Review
2.33 KB, patch
jesup
: review-
Details | Diff | Splinter Review
1.53 KB, patch
jesup
: review+
Details | Diff | Splinter Review
If you have enough interfaces, then the SDP formatter overruns the available SDP, which causes a crash. There are two defects here: 1. The hardcoded SDP length of 2048 is too small, so you get truncation. 2. When you run out of space, you assert, which is a problem. (gdb) c Continuing. Assertion failure: endbuf_p - *ptr > 0, at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c:211 Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000 sdp_build_attribute (sdp_p=0x129d8e000, level=3, ptr=0x12b8f59f0, len=359) at sdp_attr.c:211 (gdb) bt #0 sdp_build_attribute (sdp_p=0x129d8e000, level=3, ptr=0x12b8f59f0, len=359) at sdp_attr.c:211 #1 0x00000001044f47cf in sdp_build (sdp_ptr=0x129d8e000, bufp=0x12b8f5a68, len=2048) at sdp_main.c:1198 #2 0x0000000104553ff6 in sipsdp_write_to_buf (sdp_info=0x12654cff0, retbytes=0x12b8f5ab4) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/sipstack/ccsip_sdp.c:429 #3 0x00000001044ac537 in gsmsdp_encode_sdp (sdp_p=0x12654cff0, msg_body=0x12b8f5bf8) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/gsm_sdp.c:5483 #4 0x00000001044ac6e2 in gsmsdp_encode_sdp_and_update_version (dcb_p=0x129d93000, msg_body=0x12b8f5bf8) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/gsm_sdp.c:5539 #5 0x0000000104492007 in fsmdef_ev_createoffer (event=0x12b8f5e28) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/fsmdef.c:2958 #6 0x00000001044c004b in sm_process_event (tbl=0x106398e98, event=0x12b8f5e28) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/sm.c:83 #7 0x00000001044824aa in fim_process_event (data=0x128979000, cac_passed=0 '\0') at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/fim.c:671 #8 0x00000001044a3e73 in gsm_process_msg (cmd=158, msg=0x128979000) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/gsm.c:167 #9 0x00000001044a42d4 in GSMTask (arg=0x12992d400) at /Users/ekr/dev/mozilla-inbound/media/webrtc/signaling/src/sipcc/core/gsm/gsm.c:359 #10 0x00007fff89825fd6 in _pthread_start () #11 0x00007fff89825e89 in thread_start () (gdb)
Assignee: nobody → ethanhugg
The right thing to happen is to generate an error.
Severity: normal → critical
Keywords: crash
Comment on attachment 668937 [details] [diff] [review] Signaling SDP construction handles overflow This is a work in progress. I'm considering running all of the SDP construction through the new static sdp_build_line so we can handle the snprintf return and pointer arithmetic in one place. If we want to go with this idea, I can change the rest of the file as well.
Attachment #668937 - Attachment is obsolete: true
Comment on attachment 669019 [details] [diff] [review] Signaling - increase max SDP size. SDP max length upped to 4096 MOZ_ASSERT on overflow removed. SDP creation overflow should now make CreateOffer/CreateAnswer fail. You can try out the last one on OSX by running a VMWare instance in the background, and recompiling with SDP_MAX_LENGTH set back to 2048.
Attachment #669019 - Flags: review?(ekr)
Status: NEW → ASSIGNED
Summary: Crash in SDP formatted with too many ICE candidates → Crash in SDP formatted with too many ICE candidates - 'Assertion failure: endbuf_p - *ptr > 0' [@ sdp_build_attribute]
Attached file crashtest (obsolete) —
This is a proposed crash test for this fix. Boris, what would be the best location in our tree for it? /dom/tests/crashtests/? It doesn't exist yet so I wonder where to put it into. Thanks.
Comment on attachment 669019 [details] [diff] [review] Signaling - increase max SDP size. Review of attachment 669019 [details] [diff] [review]: ----------------------------------------------------------------- looks good as a short-term fix
Attachment #669019 - Flags: review?(ekr) → review+
dom/media/test/craashtests seems like the obvious place for the test (and would involve creating said dirs).
https://hg.mozilla.org/mozilla-central/rev/87f3548e638e Leaving open as this is a temporary patch Agreed, we absolutely need tests for SDP overflows, etc. (FYI henrik)
Whiteboard: [blocking-webrtc+]
Attachment #669136 - Attachment mime type: text/plain → text/html
Attachment #669006 - Attachment is obsolete: true
Comment on attachment 670018 [details] [diff] [review] Signaling SDP construction uses flex_string Still work in progress. Uploading for testing and self-splinter. SDP max length removed entirely. Uses new flex_string string handler functions. Also "Cisco-SIPUA" changed to "Mozilla-SIPUA"
Attachment #670018 - Flags: feedback?(snandaku)
Attachment #670018 - Attachment is obsolete: true
Attachment #670018 - Flags: feedback?(snandaku)
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Complete removal of SDP_MAX_STRING in favor of the new flex_string.
Attachment #670043 - Flags: review?(snandaku)
Attachment #670043 - Flags: review?(ekr)
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c @@ +73,5 @@ > + semicolon ? ";" : "", > + name, > + value); > +} > + unsigned .. should we be specific on right integral type and its size so that it maps appropriately to format specified .... @@ +237,5 @@ > SDP_PRINT("%s Built a=%s attribute line", sdp_p->debug_str, > sdp_get_attr_name(attr_p->type)); > } > + } else { > + SDP_ERROR("%s error building attribute %d", __FUNCTION__, result); Should we return on Error ? @@ +3402,3 @@ > } > + > + flex_string_append(fs, "\r\n"); line 3657 seems to add only \n from the original code ? ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +144,5 @@ > +void flex_string_init(flex_string *fs) { > + fs->buffer_length = FLEX_STRING_CHUNK_SIZE; > + fs->string_length = 0; > + fs->buffer = cpr_malloc(fs->buffer_length); > + fs->buffer[0] = '\0'; cpr_malloc(FLEX_STRING_CHUNK_SIZE) @@ +181,5 @@ > + * Not thread-safe > + */ > +void flex_string_append(flex_string *fs, const char *more) { > + fs->string_length += strlen(more); > + how do we handle non null terminated strings ... @@ +185,5 @@ > + > + flex_string_check_alloc(fs, fs->string_length + 1); > + > + sstrncat(fs->buffer, more, fs->buffer_length - strlen(fs->buffer)); > +} please update string_length after either check_alloc or sstrncat ... Also are we truncating the characters that exceed existing chunk size of flex_string ?
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c @@ +65,5 @@ > + * Helper function for adding nv-pair where value is unsigned. > + */ > +static void sdp_append_name_and_unsigned(flex_string *fs, > + const char *name, > + unsigned value, "unsigned int"? ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +144,5 @@ > +void flex_string_init(flex_string *fs) { > + fs->buffer_length = FLEX_STRING_CHUNK_SIZE; > + fs->string_length = 0; > + fs->buffer = cpr_malloc(fs->buffer_length); > + fs->buffer[0] = '\0'; I actually prefer the original, since it has less chance of typos @@ +169,5 @@ > + */ > +void flex_string_check_alloc(flex_string *fs, int new_min_length) { > + if (new_min_length > fs->buffer_length) { > + /* Oversize, allocate more */ > + fs->buffer_length = (new_min_length / FLEX_STRING_CHUNK_SIZE + 1) * FLEX_STRING_CHUNK_SIZE; I assume you want to compute: CHUNK_SIZE * ((new_min_length/CHUNK_SIZE) + 1) So that if I pass in new_min_length == chunk_size I get a result of 2 * chunk_size? If so, I would use parentheses rather than rely on precedence. Also, check for integer overflow here. @@ +181,5 @@ > + * Not thread-safe > + */ > +void flex_string_append(flex_string *fs, const char *more) { > + fs->string_length += strlen(more); > + non null terminated strings generally don't belong in C code. @@ +185,5 @@ > + > + flex_string_check_alloc(fs, fs->string_length + 1); > + > + sstrncat(fs->buffer, more, fs->buffer_length - strlen(fs->buffer)); > +} How could that happen? The whole point here is to resize up to the right point. @@ +209,5 @@ > + va_start(ap, format); > + vsnprintf_result = vsnprintf(fs->buffer + fs->string_length, fs->buffer_length - fs->string_length, format, ap); > + PR_ASSERT(vsnprintf_result > 0 && vsnprintf_result < (fs->buffer_length - fs->string_length)); > + va_end(ap); > + fs->string_length += vsnprintf_result; Can't you move this out of the if/else so you just need it once? ::: media/webrtc/signaling/src/sipcc/cpr/include/cpr_string.h @@ +39,5 @@ > > #ifndef _CPR_STRING_H_ > #define _CPR_STRING_H_ > > +#include <stdarg.h> I don't believe stdarg.h is required here, since you don't use the va_* macros. @@ +107,5 @@ > + > +typedef struct { > + char *buffer; > + unsigned buffer_length; > + unsigned string_length; I would use size_t. If you want unsigned int, then at least use "unsigned int" not just unsigned.
Attachment #670043 - Flags: review?(ekr) → review+
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c @@ +3402,3 @@ > } > + > + flex_string_append(fs, "\r\n"); Good eye, I'm pretty sure the original one is wrong is this case so I changed it. Every other line of SDP ends in \r\n. ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +144,5 @@ > +void flex_string_init(flex_string *fs) { > + fs->buffer_length = FLEX_STRING_CHUNK_SIZE; > + fs->string_length = 0; > + fs->buffer = cpr_malloc(fs->buffer_length); > + fs->buffer[0] = '\0'; I wanted the minimum chance that someone could edit and set the buffer_length and malloc separately. @@ +181,5 @@ > + * Not thread-safe > + */ > +void flex_string_append(flex_string *fs, const char *more) { > + fs->string_length += strlen(more); > + strlen will fly through available memory until encountering a null by chance or causing an access violation, or did you mean something else by non-null-terminated string? @@ +185,5 @@ > + > + flex_string_check_alloc(fs, fs->string_length + 1); > + > + sstrncat(fs->buffer, more, fs->buffer_length - strlen(fs->buffer)); > +} setting string_length at the end would require a new uint on the stack like "unsigned int new_length = fs->string_length + strlen(more);" I just avoided the extra var by doing it this way. It's not re-entrant so no one is going to try to use the flex_string until after the fcn completes. @@ +209,5 @@ > + va_start(ap, format); > + vsnprintf_result = vsnprintf(fs->buffer + fs->string_length, fs->buffer_length - fs->string_length, format, ap); > + PR_ASSERT(vsnprintf_result > 0 && vsnprintf_result < (fs->buffer_length - fs->string_length)); > + va_end(ap); > + fs->string_length += vsnprintf_result; Sure. Hidden here is what we do with a vsnprintf return of -1. I'm currently doing nothing assuming the format string was bogus. ::: media/webrtc/signaling/src/sipcc/cpr/include/cpr_string.h @@ +39,5 @@ > > #ifndef _CPR_STRING_H_ > #define _CPR_STRING_H_ > > +#include <stdarg.h> Yes,that should be moved to the .c
Whiteboard: [blocking-webrtc+] → [WebRTC] [blocking-webrtc+]
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +144,5 @@ > +void flex_string_init(flex_string *fs) { > + fs->buffer_length = FLEX_STRING_CHUNK_SIZE; > + fs->string_length = 0; > + fs->buffer = cpr_malloc(fs->buffer_length); > + fs->buffer[0] = '\0'; ekr/ehugg++ @@ +166,5 @@ > + * Allocate enough chunks to hold the new minimum size. > + * > + * Not thread-safe > + */ > +void flex_string_check_alloc(flex_string *fs, int new_min_length) { size_t for length? @@ +169,5 @@ > + */ > +void flex_string_check_alloc(flex_string *fs, int new_min_length) { > + if (new_min_length > fs->buffer_length) { > + /* Oversize, allocate more */ > + fs->buffer_length = (new_min_length / FLEX_STRING_CHUNK_SIZE + 1) * FLEX_STRING_CHUNK_SIZE; Which makes sense, since you probably want to allocate more than needed in these cases. But how do you get a buffer_length < 1*FLEX_STRING_CHUNK_SIZE? We only reallocate if new_min_length > fs->buffer_length, so if buffer_length == FLEX_STRING_CHUNK_SIZE the case you mention won't happen. And in general, if new_min_length % FLEX_STRING_CHUNK_SIZE == 0, then it's also unlikely (perhaps impossible) that buffer_length isn't a multiple of FLEX_STRING_CHUNK_SIZE. Agreed on parens overflow: We only bump the size by FLEX_STRING_CHUNK_SIZE at most above new_min_length. Passing in values less than FLEX_STRING_CHUNK_SIZE from MAXINT is likely a pretty serious error... and unlikely to be successful in allocating negative values (if int). If it's size_t, it would wrap around to a small allocation, but the question is how something could cause such a large allocation. However: put some unreasonable limit on the string buffer size. @@ +181,5 @@ > + * Not thread-safe > + */ > +void flex_string_append(flex_string *fs, const char *more) { > + fs->string_length += strlen(more); > + As in, an unterminated string is an API error in the caller, and hard to check here. If you need to support unterminated strings (buffer+length), use a separate function. ::: media/webrtc/signaling/src/sipcc/cpr/include/cpr_string.h @@ +107,5 @@ > + > +typedef struct { > + char *buffer; > + unsigned buffer_length; > + unsigned string_length; size_t please
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +169,5 @@ > + */ > +void flex_string_check_alloc(flex_string *fs, int new_min_length) { > + if (new_min_length > fs->buffer_length) { > + /* Oversize, allocate more */ > + fs->buffer_length = (new_min_length / FLEX_STRING_CHUNK_SIZE + 1) * FLEX_STRING_CHUNK_SIZE; Also one thing I now see is I am doing the +1 for NULL in two places, the check_alloc and the calls to it. I'll removed the +1 in the check_alloc. (or maybe put two NULLs for safety ;-)) Jesup do you have a suggestion for an unreasonable limit to the string buffer size? I've changed it to a size_t, but I'm not sure what would be a good value to use as a limit, and what is the best way to do an abort from here. Also, I'm considering putting in an overflow check by doing a divide of SIZE_MAX now that it's a size_t. Like this: /* Overflow check */ MOZ_ASSERT((SIZE_MAX / FLEX_STRING_CHUNK_SIZE) >= ((new_min_length / FLEX_STRING_CHUNK_SIZE) + 1)); Opinions?
Comment on attachment 670043 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670043 [details] [diff] [review]: ----------------------------------------------------------------- ::: media/webrtc/signaling/src/sipcc/cpr/common/cpr_string.c @@ +169,5 @@ > + */ > +void flex_string_check_alloc(flex_string *fs, int new_min_length) { > + if (new_min_length > fs->buffer_length) { > + /* Oversize, allocate more */ > + fs->buffer_length = (new_min_length / FLEX_STRING_CHUNK_SIZE + 1) * FLEX_STRING_CHUNK_SIZE; Wait, ignore that bit about the +1s - I'm losing my mind.
Attachment #670043 - Attachment is obsolete: true
Attachment #670043 - Flags: review?(snandaku)
Attachment #670183 - Attachment is obsolete: true
Comment on attachment 670185 [details] [diff] [review] Signaling SDP construction uses flex_string Addressed the review comments and a couple more things. Changed PR_ASSERTs to MOZ_ASSERTs flex_string will no longer alloc an extra CHUNK_SIZE when alloc mod CHUNK_SIZE == 0 TRY build here - https://tbpl.mozilla.org/?tree=Try&rev=fe15ec3b29a0
Attachment #670185 - Flags: review?(rjesup)
(In reply to Ethan Hugg [:ehugg] from comment #19) > Jesup do you have a suggestion for an unreasonable limit to the string > buffer size? I've changed it to a size_t, but I'm not sure what would be a > good value to use as a limit, and what is the best way to do an abort from > here. Since it's done only when doing a malloc, I'm ok with a runtime check here. It also protects us against unreasonable-size allocation attacks (not super likely, and you'd have to get there one malloc at a time, though in theory a single malloc could be very large...) It has the side-benefit of semi-blocking attempts to DoS the browser using expanding allocations. Shall we say max of 1MB? 2MB? Can you see >1MB SDP as ever being reasonable? I can see 10's of K in some cases, maybe in crazy-extreme cases you could find a use for 100K (though you'd probably need to support CapNeg to do so... ;-) Hard to see 1MB. > Also, I'm considering putting in an overflow check by doing a divide of > SIZE_MAX now that it's a size_t. Like this: Not needed if we put a limit in. Or we put no limit in, and just do: MOZ_ASSERT(new_size > old_size);
Comment on attachment 670185 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670185 [details] [diff] [review]: ----------------------------------------------------------------- I really like how this cleans up the code and removes an entire class of otherwise-recurring problems. If you want to macro-ize parts, that's great, but r+ ::: media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c @@ +228,5 @@ > SDP_WARN("%s Invalid attribute type to build (%u)", > sdp_p->debug_str, attr_p->type); > } > } else { > + probably remove this blank line - super-minor @@ +271,5 @@ > return (SDP_SUCCESS); > } > } > > +sdp_result_e sdp_build_attr_simple_string (sdp_t *sdp_p, sdp_attr_t *attr_p, flex_string *fs) wrap @@ +276,2 @@ > { > + flex_string_sprintf(fs, "a=%s:%s\r\n", sdp_attr[attr_p->type].name, attr_p->attr.string_val); wrap - not a big deal; I'm not a stickler for line length (and violate it myself), but splinter is happier with < 80 char lines I think. On the other hand, if a longer length is already typical in the file - forget this comment, be consistent with the file. @@ +1964,5 @@ > + semicolon = TRUE; > + } > + > + if (fmtp_p->qcif > 0) { > + sdp_append_name_and_unsigned(fs, "QCIF", attr_p->attr.fmtp.qcif, semicolon); Very tempted to make a macro: #define UNSIGNED_PARAM(cond,name,value) \ if ((cond)) { \ sdp_append_name_and_unsigned(fs,(name),(value),semicolon); \ semicolon = TRUE; \ } UNSIGNED_PARAM(fmtp->qcif > 0, "QCIF", attr_p->attr.fmtp.qcif) UNSIGNED_PARAM(fmtp->cif > 0, "CIF", attr_p->attr.fmtp.cif) ... But honestly it doesn't save space, just lines of cut-and-paste, so in the end it may not be worth it unless there are a LOT of these. On the other hand, maybe there are enough to make a few macros like this to make it easier to read, vet and add new value to fmtp/etc lines. And it's easier to concentrate on the few that don't fit any of the macros.
Attachment #670185 - Flags: review?(rjesup) → review+
Attachment #670185 - Attachment is obsolete: true
Attachment #670465 - Attachment is obsolete: true
Comment on attachment 670475 [details] [diff] [review] Signaling SDP construction uses flex_string Added macros for simplifying the repetitive code in sdp_build_attr_fmtp. Also wrapped a bunch of long lines for those of you still using your VT100s.
Attachment #670475 - Flags: review?(rjesup)
Comment on attachment 670475 [details] [diff] [review] Signaling SDP construction uses flex_string Review of attachment 670475 [details] [diff] [review]: ----------------------------------------------------------------- Our VT100's (and splinter) thank you
Attachment #670475 - Flags: review?(rjesup) → review+
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla19
This definitely could use a test; perhaps by using ridiculously long strings where we have some ability to control the SDP generated from JS (otherwise it will need to be added to the C++ unit tests, and might be better there since more of the functionality can be tested).
So I put together a crashtest for this crash. But sadly we can't get it landed until the leaks it discovers are getting fixed. I will file this as a follow-up bug.
Attached patch Crashtest v1Splinter Review
First crashtest for WebRTC! It will be disabled for now on m-c due to leakage (see bug 801682). Results without it being disabled you can find here: https://tbpl.mozilla.org/?tree=Try&rev=afd532de4f16
Attachment #669136 - Attachment is obsolete: true
Attachment #671472 - Flags: review?(rjesup)
Comment on attachment 671472 [details] [diff] [review] Crashtest v1 Unfortunately this cannot be known to reliably reproduce the crash as it's dependent on the number of interfaces and ICE candidates generated.
Attachment #671472 - Flags: review?(rjesup) → review-
As given by Randell on IRC we probably have to wait until appropriate interfaces are available so that it can be done as a crashtest (reftest). For now there should be a way to do it via an unit test. So I will hold off from further work on this crashtest for now.
Is this going to land on Aurora? Bug 791702 is marked tracking for 18, and is fixed by the patch here, apparently.
Reopening. Bug found in flex_string_sprintf on Windows builds. Windows version of vsnprintf is different than Linux/OSX.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Comment on attachment 672636 [details] [diff] [review] Patch 3 - flex_string fix for Windows vsnprintf Using derf's suggestion because PR_vsnprintf does not return formatted size.
Attachment #672636 - Flags: review?(rjesup)
Attachment #672636 - Flags: review?(rjesup) → review+
Status: REOPENED → RESOLVED
Closed: 13 years ago13 years ago
Resolution: --- → FIXED
Once we're verified with the Windows fix, I plan to ask for uplift to Aurora.
I'll note that the standard loopback demo at http://people.mozilla.com/~anarayanan/webrtc/pc_test.html provokes the last issue on Windows, and that now appears to work.
Whiteboard: [WebRTC] [blocking-webrtc+] → [WebRTC], [blocking-webrtc+], [blocking-gum+], [qa-]
Comment on attachment 670475 [details] [diff] [review] Signaling SDP construction uses flex_string [Approval Request Comment] Bug caused by (feature/regressing bug #): main webrtc signaling landing just before 18 uplift. User impact if declined: Failure to create useful offers or answers if the user has too many interfaces, possible security impact. Testing completed (on m-c, etc.): Tested on m-c and baked for several weeks, with one regression fix (on this same bug, patch #3). Risk to taking this patch (and alternatives if risky): Pretty low risk; patch is large but largely mechanical API change. Basic code is quite clean and it removes tons of error paths, as the only size-related error left is OOM and we use infallible malloc. String or UUID changes made by this patch: None
Attachment #670475 - Flags: approval-mozilla-aurora?
Comment on attachment 670475 [details] [diff] [review] Signaling SDP construction uses flex_string Approving because the patch is low risk for a new feature landed in 18, baked on m-c for several weeks and fixes a regression tracking 18 .
Attachment #670475 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
Blocks: 865774
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: