| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fpdfapi/page/pageint.h" | 7 #include "core/fpdfapi/page/pageint.h" |
| 8 | 8 |
| 9 #include <limits.h> | 9 #include <limits.h> |
| 10 | 10 |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 case PSOP_INDEX: { | 369 case PSOP_INDEX: { |
| 370 int n = static_cast<int>(Pop()); | 370 int n = static_cast<int>(Pop()); |
| 371 if (n < 0 || n >= static_cast<int>(m_StackCount)) | 371 if (n < 0 || n >= static_cast<int>(m_StackCount)) |
| 372 break; | 372 break; |
| 373 Push(m_Stack[m_StackCount - n - 1]); | 373 Push(m_Stack[m_StackCount - n - 1]); |
| 374 break; | 374 break; |
| 375 } | 375 } |
| 376 case PSOP_ROLL: { | 376 case PSOP_ROLL: { |
| 377 int j = static_cast<int>(Pop()); | 377 int j = static_cast<int>(Pop()); |
| 378 int n = static_cast<int>(Pop()); | 378 int n = static_cast<int>(Pop()); |
| 379 if (m_StackCount == 0) | 379 if (j == 0 || n == 0 || m_StackCount == 0) |
| 380 break; | 380 break; |
| 381 if (n < 0 || n > static_cast<int>(m_StackCount)) | 381 if (n < 0 || n > static_cast<int>(m_StackCount)) |
| 382 break; | 382 break; |
| 383 |
| 384 j %= n; |
| 383 if (j < 0) { | 385 if (j < 0) { |
| 384 for (int i = 0; i < -j; i++) { | 386 for (int i = 0; i < -j; i++) { |
| 385 FX_FLOAT first = m_Stack[m_StackCount - n]; | 387 FX_FLOAT first = m_Stack[m_StackCount - n]; |
| 386 for (int ii = 0; ii < n - 1; ii++) | 388 for (int ii = 0; ii < n - 1; ii++) |
| 387 m_Stack[m_StackCount - n + ii] = m_Stack[m_StackCount - n + ii + 1]; | 389 m_Stack[m_StackCount - n + ii] = m_Stack[m_StackCount - n + ii + 1]; |
| 388 m_Stack[m_StackCount - 1] = first; | 390 m_Stack[m_StackCount - 1] = first; |
| 389 } | 391 } |
| 390 } else { | 392 } else { |
| 391 for (int i = 0; i < j; i++) { | 393 for (int i = 0; i < j; i++) { |
| 392 FX_FLOAT last = m_Stack[m_StackCount - 1]; | 394 FX_FLOAT last = m_Stack[m_StackCount - 1]; |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 return m_Type == Type::kType2ExpotentialInterpolation | 838 return m_Type == Type::kType2ExpotentialInterpolation |
| 837 ? static_cast<const CPDF_ExpIntFunc*>(this) | 839 ? static_cast<const CPDF_ExpIntFunc*>(this) |
| 838 : nullptr; | 840 : nullptr; |
| 839 } | 841 } |
| 840 | 842 |
| 841 const CPDF_StitchFunc* CPDF_Function::ToStitchFunc() const { | 843 const CPDF_StitchFunc* CPDF_Function::ToStitchFunc() const { |
| 842 return m_Type == Type::kType3Stitching | 844 return m_Type == Type::kType3Stitching |
| 843 ? static_cast<const CPDF_StitchFunc*>(this) | 845 ? static_cast<const CPDF_StitchFunc*>(this) |
| 844 : nullptr; | 846 : nullptr; |
| 845 } | 847 } |
| OLD | NEW |