Changeset 160335 in webkit
- Timestamp:
- Dec 9, 2013, 3:27:42 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
platform/mac/ScrollbarThemeMac.mm (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r160330 r160335 1 2013-12-09 Simon Fraser <simon.fraser@apple.com> 2 3 Avoid divide by zero in scrollbar code, and protect against Obj-C exceptions 4 https://bugs.webkit.org/show_bug.cgi?id=125469 5 <rdar://problem/15535772> 6 7 Reviewed by Beth Dakin. 8 9 In ScrollbarThemeMac::setPaintCharacteristicsForScrollbar(), proportion could 10 end up as NaN if scrollbar->totalSize() were zero. Protect against that. 11 12 Also wrap functions that call into Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/ 13 END_BLOCK_OBJC_EXCEPTIONS. 14 15 * platform/mac/ScrollbarThemeMac.mm: 16 (WebCore::ScrollbarThemeMac::scrollbarThickness): 17 (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle): 18 (WebCore::ScrollbarThemeMac::minimumThumbLength): 19 (WebCore::ScrollbarThemeMac::updateEnabledState): 20 (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar): 21 (WebCore::scrollbarPainterPaint): 22 1 23 2013-12-09 Ryosuke Niwa <rniwa@webkit.org> 2 24 -
trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm
r159027 r160335 27 27 #include "ScrollbarThemeMac.h" 28 28 29 #include "BlockExceptions.h" 29 30 #include "ColorMac.h" 30 31 #include "ImageBuffer.h" … … 222 223 int ScrollbarThemeMac::scrollbarThickness(ScrollbarControlSize controlSize) 223 224 { 225 BEGIN_BLOCK_OBJC_EXCEPTIONS; 224 226 ScrollbarPainter scrollbarPainter = [NSClassFromString(@"NSScrollerImp") scrollerImpWithStyle:recommendedScrollerStyle() controlSize:controlSize horizontal:NO replacingScrollerImp:nil]; 225 227 if (supportsExpandedScrollbars()) 226 228 [scrollbarPainter setExpanded:YES]; 227 229 return [scrollbarPainter trackBoxWidth]; 230 END_BLOCK_OBJC_EXCEPTIONS; 228 231 } 229 232 … … 240 243 void ScrollbarThemeMac::updateScrollbarOverlayStyle(ScrollbarThemeClient* scrollbar) 241 244 { 245 BEGIN_BLOCK_OBJC_EXCEPTIONS; 242 246 ScrollbarPainter painter = painterForScrollbar(scrollbar); 243 247 switch (scrollbar->scrollbarOverlayStyle()) { … … 252 256 break; 253 257 } 258 END_BLOCK_OBJC_EXCEPTIONS; 254 259 } 255 260 … … 421 426 int ScrollbarThemeMac::minimumThumbLength(ScrollbarThemeClient* scrollbar) 422 427 { 428 BEGIN_BLOCK_OBJC_EXCEPTIONS; 423 429 return [scrollbarMap()->get(scrollbar) knobMinLength]; 430 END_BLOCK_OBJC_EXCEPTIONS; 424 431 } 425 432 … … 458 465 void ScrollbarThemeMac::updateEnabledState(ScrollbarThemeClient* scrollbar) 459 466 { 467 BEGIN_BLOCK_OBJC_EXCEPTIONS; 460 468 [scrollbarMap()->get(scrollbar) setEnabled:scrollbar->enabled()]; 469 END_BLOCK_OBJC_EXCEPTIONS; 461 470 } 462 471 463 472 void ScrollbarThemeMac::setPaintCharacteristicsForScrollbar(ScrollbarThemeClient* scrollbar) 464 473 { 474 BEGIN_BLOCK_OBJC_EXCEPTIONS; 465 475 ScrollbarPainter painter = painterForScrollbar(scrollbar); 466 476 … … 468 478 float overhang; 469 479 ScrollableArea::computeScrollbarValueAndOverhang(scrollbar->currentPos(), scrollbar->totalSize(), scrollbar->visibleSize(), value, overhang); 470 float proportion = (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize();480 float proportion = scrollbar->totalSize() > 0 ? (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize() : 1; 471 481 472 482 [painter setEnabled:scrollbar->enabled()]; … … 474 484 [painter setDoubleValue:value]; 475 485 [painter setKnobProportion:proportion]; 486 END_BLOCK_OBJC_EXCEPTIONS; 476 487 } 477 488 478 489 static void scrollbarPainterPaint(ScrollbarPainter scrollbarPainter, bool enabled) 479 490 { 491 BEGIN_BLOCK_OBJC_EXCEPTIONS; 480 492 // Use rectForPart: here; it will take the expansion transition progress into account. 481 493 NSRect trackRect = [scrollbarPainter rectForPart:NSScrollerKnobSlot]; … … 486 498 if (enabled) 487 499 [scrollbarPainter drawKnob]; 500 END_BLOCK_OBJC_EXCEPTIONS; 488 501 } 489 502
Note:
See TracChangeset
for help on using the changeset viewer.