mathjs 13.0.3 → 13.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. package/HISTORY.md +30 -1
  2. package/bin/cli.js +24 -10
  3. package/lib/browser/math.js +1 -1
  4. package/lib/browser/math.js.LICENSE.txt +2 -2
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +12 -9
  7. package/lib/cjs/core/function/typed.js +3 -4
  8. package/lib/cjs/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  9. package/lib/cjs/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  10. package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -2
  11. package/lib/cjs/entry/pureFunctionsAny.generated.js +6 -8
  12. package/lib/cjs/entry/typeChecks.js +18 -0
  13. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -2
  14. package/lib/cjs/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  15. package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
  16. package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +1 -1
  17. package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  18. package/lib/cjs/expression/embeddedDocs/function/matrix/kron.js +1 -1
  19. package/lib/cjs/expression/embeddedDocs/function/matrix/map.js +3 -3
  20. package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  22. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  23. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  24. package/lib/cjs/expression/embeddedDocs/function/utils/clone.js +1 -1
  25. package/lib/cjs/expression/function/evaluate.js +5 -0
  26. package/lib/cjs/expression/node/FunctionNode.js +10 -2
  27. package/lib/cjs/expression/transform/filter.transform.js +2 -2
  28. package/lib/cjs/expression/transform/map.transform.js +104 -37
  29. package/lib/cjs/expression/transform/utils/dimToZeroBase.js +23 -0
  30. package/lib/cjs/expression/transform/utils/lastDimToZeroBase.js +3 -4
  31. package/lib/cjs/function/arithmetic/hypot.js +3 -3
  32. package/lib/cjs/function/matrix/apply.js +1 -1
  33. package/lib/cjs/function/matrix/fft.js +3 -3
  34. package/lib/cjs/function/matrix/filter.js +2 -2
  35. package/lib/cjs/function/matrix/flatten.js +5 -6
  36. package/lib/cjs/function/matrix/ifft.js +2 -2
  37. package/lib/cjs/function/matrix/kron.js +4 -4
  38. package/lib/cjs/function/matrix/map.js +109 -18
  39. package/lib/cjs/function/matrix/size.js +7 -7
  40. package/lib/cjs/function/matrix/squeeze.js +3 -4
  41. package/lib/cjs/function/probability/random.js +1 -1
  42. package/lib/cjs/function/probability/randomInt.js +1 -1
  43. package/lib/cjs/function/statistics/cumsum.js +2 -2
  44. package/lib/cjs/function/trigonometry/acoth.js +2 -2
  45. package/lib/cjs/function/trigonometry/acsch.js +2 -2
  46. package/lib/cjs/header.js +2 -2
  47. package/lib/cjs/type/matrix/DenseMatrix.js +3 -28
  48. package/lib/cjs/type/matrix/SparseMatrix.js +5 -8
  49. package/lib/cjs/utils/array.js +27 -0
  50. package/lib/cjs/utils/collection.js +1 -1
  51. package/lib/cjs/utils/customs.js +5 -12
  52. package/lib/cjs/utils/function.js +0 -14
  53. package/lib/cjs/utils/is.js +27 -0
  54. package/lib/cjs/utils/map.js +7 -23
  55. package/lib/cjs/version.js +1 -1
  56. package/lib/esm/core/create.js +9 -6
  57. package/lib/esm/core/function/typed.js +2 -3
  58. package/lib/esm/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  59. package/lib/esm/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  60. package/lib/esm/entry/impureFunctionsAny.generated.js +3 -3
  61. package/lib/esm/entry/pureFunctionsAny.generated.js +7 -9
  62. package/lib/esm/entry/typeChecks.js +1 -1
  63. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -2
  64. package/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  65. package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
  66. package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +1 -1
  67. package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  68. package/lib/esm/expression/embeddedDocs/function/matrix/kron.js +1 -1
  69. package/lib/esm/expression/embeddedDocs/function/matrix/map.js +3 -3
  70. package/lib/esm/expression/embeddedDocs/function/special/zeta.js +1 -1
  71. package/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  72. package/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  73. package/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  74. package/lib/esm/expression/embeddedDocs/function/utils/clone.js +1 -1
  75. package/lib/esm/expression/function/compile.js +1 -1
  76. package/lib/esm/expression/function/evaluate.js +8 -3
  77. package/lib/esm/expression/node/FunctionNode.js +10 -2
  78. package/lib/esm/expression/parse.js +2 -2
  79. package/lib/esm/expression/transform/filter.transform.js +4 -4
  80. package/lib/esm/expression/transform/forEach.transform.js +4 -4
  81. package/lib/esm/expression/transform/map.transform.js +104 -37
  82. package/lib/esm/expression/transform/print.transform.js +2 -2
  83. package/lib/esm/expression/transform/utils/dimToZeroBase.js +16 -0
  84. package/lib/esm/expression/transform/utils/lastDimToZeroBase.js +4 -6
  85. package/lib/esm/function/algebra/decomposition/slu.js +1 -1
  86. package/lib/esm/function/algebra/derivative.js +15 -15
  87. package/lib/esm/function/algebra/lyap.js +4 -4
  88. package/lib/esm/function/algebra/simplify/util.js +3 -3
  89. package/lib/esm/function/algebra/simplifyConstant.js +9 -9
  90. package/lib/esm/function/algebra/solver/lsolve.js +3 -3
  91. package/lib/esm/function/algebra/solver/lsolveAll.js +3 -3
  92. package/lib/esm/function/algebra/solver/lusolve.js +5 -5
  93. package/lib/esm/function/algebra/solver/usolve.js +3 -3
  94. package/lib/esm/function/algebra/solver/usolveAll.js +3 -3
  95. package/lib/esm/function/algebra/sylvester.js +7 -7
  96. package/lib/esm/function/arithmetic/addScalar.js +4 -4
  97. package/lib/esm/function/arithmetic/ceil.js +6 -6
  98. package/lib/esm/function/arithmetic/divide.js +5 -5
  99. package/lib/esm/function/arithmetic/divideScalar.js +5 -5
  100. package/lib/esm/function/arithmetic/fix.js +5 -5
  101. package/lib/esm/function/arithmetic/floor.js +6 -6
  102. package/lib/esm/function/arithmetic/hypot.js +3 -3
  103. package/lib/esm/function/arithmetic/mod.js +3 -3
  104. package/lib/esm/function/arithmetic/multiply.js +7 -7
  105. package/lib/esm/function/arithmetic/multiplyScalar.js +4 -4
  106. package/lib/esm/function/arithmetic/norm.js +2 -2
  107. package/lib/esm/function/arithmetic/pow.js +6 -6
  108. package/lib/esm/function/arithmetic/round.js +7 -7
  109. package/lib/esm/function/arithmetic/subtractScalar.js +4 -4
  110. package/lib/esm/function/arithmetic/xgcd.js +1 -1
  111. package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
  112. package/lib/esm/function/combinatorics/catalan.js +1 -1
  113. package/lib/esm/function/combinatorics/composition.js +1 -1
  114. package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
  115. package/lib/esm/function/geometry/distance.js +4 -4
  116. package/lib/esm/function/geometry/intersect.js +2 -2
  117. package/lib/esm/function/logical/and.js +2 -2
  118. package/lib/esm/function/logical/or.js +2 -2
  119. package/lib/esm/function/logical/xor.js +2 -2
  120. package/lib/esm/function/matrix/apply.js +2 -2
  121. package/lib/esm/function/matrix/column.js +1 -1
  122. package/lib/esm/function/matrix/concat.js +1 -1
  123. package/lib/esm/function/matrix/count.js +1 -1
  124. package/lib/esm/function/matrix/cross.js +3 -3
  125. package/lib/esm/function/matrix/diag.js +10 -10
  126. package/lib/esm/function/matrix/diff.js +2 -2
  127. package/lib/esm/function/matrix/eigs.js +3 -3
  128. package/lib/esm/function/matrix/fft.js +3 -3
  129. package/lib/esm/function/matrix/filter.js +4 -4
  130. package/lib/esm/function/matrix/flatten.js +5 -6
  131. package/lib/esm/function/matrix/forEach.js +4 -4
  132. package/lib/esm/function/matrix/identity.js +6 -6
  133. package/lib/esm/function/matrix/ifft.js +3 -3
  134. package/lib/esm/function/matrix/inv.js +1 -1
  135. package/lib/esm/function/matrix/kron.js +7 -7
  136. package/lib/esm/function/matrix/map.js +110 -19
  137. package/lib/esm/function/matrix/matrixFromFunction.js +6 -6
  138. package/lib/esm/function/matrix/ones.js +2 -2
  139. package/lib/esm/function/matrix/partitionSelect.js +2 -2
  140. package/lib/esm/function/matrix/pinv.js +1 -1
  141. package/lib/esm/function/matrix/range.js +10 -10
  142. package/lib/esm/function/matrix/reshape.js +2 -2
  143. package/lib/esm/function/matrix/rotate.js +4 -4
  144. package/lib/esm/function/matrix/rotationMatrix.js +6 -6
  145. package/lib/esm/function/matrix/row.js +1 -1
  146. package/lib/esm/function/matrix/size.js +8 -8
  147. package/lib/esm/function/matrix/sort.js +4 -4
  148. package/lib/esm/function/matrix/sqrtm.js +1 -1
  149. package/lib/esm/function/matrix/squeeze.js +3 -4
  150. package/lib/esm/function/matrix/subset.js +2 -2
  151. package/lib/esm/function/matrix/zeros.js +2 -2
  152. package/lib/esm/function/probability/combinations.js +1 -1
  153. package/lib/esm/function/probability/combinationsWithRep.js +2 -2
  154. package/lib/esm/function/probability/kldivergence.js +4 -4
  155. package/lib/esm/function/probability/multinomial.js +1 -1
  156. package/lib/esm/function/probability/permutations.js +2 -2
  157. package/lib/esm/function/probability/pickRandom.js +6 -6
  158. package/lib/esm/function/probability/random.js +1 -1
  159. package/lib/esm/function/probability/randomInt.js +1 -1
  160. package/lib/esm/function/relational/compare.js +6 -6
  161. package/lib/esm/function/relational/deepEqual.js +1 -1
  162. package/lib/esm/function/relational/equal.js +1 -1
  163. package/lib/esm/function/relational/equalScalar.js +7 -7
  164. package/lib/esm/function/relational/equalText.js +1 -1
  165. package/lib/esm/function/relational/larger.js +3 -3
  166. package/lib/esm/function/relational/largerEq.js +4 -4
  167. package/lib/esm/function/relational/smaller.js +3 -3
  168. package/lib/esm/function/relational/smallerEq.js +3 -3
  169. package/lib/esm/function/relational/unequal.js +1 -1
  170. package/lib/esm/function/set/setCartesian.js +1 -1
  171. package/lib/esm/function/set/setDifference.js +1 -1
  172. package/lib/esm/function/set/setDistinct.js +1 -1
  173. package/lib/esm/function/set/setIntersect.js +1 -1
  174. package/lib/esm/function/set/setIsSubset.js +1 -1
  175. package/lib/esm/function/set/setMultiplicity.js +1 -1
  176. package/lib/esm/function/set/setPowerset.js +1 -1
  177. package/lib/esm/function/set/setSize.js +2 -2
  178. package/lib/esm/function/set/setSymDifference.js +1 -1
  179. package/lib/esm/function/set/setUnion.js +1 -1
  180. package/lib/esm/function/signal/freqz.js +6 -6
  181. package/lib/esm/function/statistics/corr.js +2 -2
  182. package/lib/esm/function/statistics/cumsum.js +3 -3
  183. package/lib/esm/function/statistics/max.js +1 -1
  184. package/lib/esm/function/statistics/median.js +3 -3
  185. package/lib/esm/function/statistics/min.js +1 -1
  186. package/lib/esm/function/statistics/prod.js +1 -1
  187. package/lib/esm/function/statistics/variance.js +2 -2
  188. package/lib/esm/function/string/bin.js +2 -2
  189. package/lib/esm/function/string/hex.js +2 -2
  190. package/lib/esm/function/string/oct.js +2 -2
  191. package/lib/esm/function/trigonometry/acoth.js +2 -2
  192. package/lib/esm/function/trigonometry/acsch.js +2 -2
  193. package/lib/esm/type/bigint.js +1 -1
  194. package/lib/esm/type/complex/function/complex.js +2 -2
  195. package/lib/esm/type/fraction/function/fraction.js +1 -1
  196. package/lib/esm/type/matrix/DenseMatrix.js +13 -38
  197. package/lib/esm/type/matrix/SparseMatrix.js +5 -8
  198. package/lib/esm/type/matrix/function/index.js +1 -1
  199. package/lib/esm/type/matrix/function/matrix.js +1 -1
  200. package/lib/esm/type/matrix/function/sparse.js +2 -2
  201. package/lib/esm/type/number.js +1 -1
  202. package/lib/esm/type/unit/function/createUnit.js +3 -3
  203. package/lib/esm/type/unit/function/splitUnit.js +1 -1
  204. package/lib/esm/type/unit/function/unit.js +2 -2
  205. package/lib/esm/utils/array.js +26 -0
  206. package/lib/esm/utils/collection.js +1 -1
  207. package/lib/esm/utils/customs.js +5 -12
  208. package/lib/esm/utils/function.js +0 -13
  209. package/lib/esm/utils/is.js +24 -0
  210. package/lib/esm/utils/map.js +7 -22
  211. package/lib/esm/version.js +1 -1
  212. package/package.json +13 -13
  213. package/types/index.d.ts +57 -18
package/HISTORY.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # History
2
2
 
3
+ # 2024-08-27, 13.1.1
4
+
5
+ - Fix security vulnerability in the CLI and web API allowing to call functions
6
+ `import`, `createUnit` and `reviver`, allowing to get access to the internal
7
+ math namespace and allowing arbitrary code execution. Thanks @StarlightPWN.
8
+ - Fix security vulnerability: when overwriting a `rawArgs` function with a
9
+ non-`rawArgs` function, it was still called with raw arguments. This was both
10
+ a functional issue and a security issue. Thanks @StarlightPWN.
11
+ - Fix security vulnerability: ensure that `ObjectWrappingMap` cannot delete
12
+ unsafe properties. Thanks @StarlightPWN.
13
+ - Fix: not being able to use methods and properties on arrays inside the
14
+ expression parser.
15
+
16
+ # 2024-08-26, 13.1.0
17
+
18
+ - Feat: support multiple inputs in function `map` (#3228, #3196).
19
+ Thanks @dvd101x.
20
+ - Feat: add matrix datatypes in more cases (#3235). Thanks @dvd101x.
21
+ - Feat: export util functions `isMap`, `isPartitionedMap`, and
22
+ `isObjectWrappingMap`.
23
+ - Fix: #3241 function `map` not always working with matrices (#3242).
24
+ Thanks @dvd101x.
25
+ - Fix: #3244 fix broken link to `ResultSet` in the docs about classes.
26
+ - Docs: add a link to the documentation page about the syntax expression
27
+ from the function `evaluate` (see #3238).
28
+ - Docs: improve the documentation of `scope` and fix the example
29
+ `custom_scope_objects.js` (#3150)
30
+ - Docs: spelling fixes in the embedded docs (#3252). Thanks @dvd101x.
31
+
3
32
  # 2024-07-19, 13.0.3
4
33
 
5
34
  - Fix: #3232 fix type definitions of function `format` to support notations
@@ -503,7 +532,7 @@ Non-breaking changes:
503
532
 
504
533
  # 2022-05-24, version 10.6.0
505
534
 
506
- - Implementation of fourier transform functions `fft` and `ifft` (#2540).
535
+ - Implementation of Fourier transform functions `fft` and `ifft` (#2540).
507
536
  Thanks @HanchaiN.
508
537
  - Fix TypeScript types not being listed in the exported fields (#2569).
509
538
  Thanks @mattvague.
package/bin/cli.js CHANGED
@@ -56,10 +56,23 @@ const PRECISION = 14 // decimals
56
56
  * "Lazy" load math.js: only require when we actually start using it.
57
57
  * This ensures the cli application looks like it loads instantly.
58
58
  * When requesting help or version number, math.js isn't even loaded.
59
- * @return {*}
59
+ * @return {{ evalute: function, parse: function, math: Object }}
60
60
  */
61
61
  function getMath () {
62
- return require('../lib/browser/math.js')
62
+ const { create, all } = require('../lib/browser/math.js')
63
+
64
+ const math = create(all)
65
+ const parse = math.parse
66
+ const evaluate = math.evaluate
67
+
68
+ // See https://mathjs.org/docs/expressions/security.html#less-vulnerable-expression-parser
69
+ math.import({
70
+ 'import': function () { throw new Error('Function import is disabled') },
71
+ 'createUnit': function () { throw new Error('Function createUnit is disabled') },
72
+ 'reviver': function () { throw new Error('Function reviver is disabled') }
73
+ }, { override: true })
74
+
75
+ return { math, parse, evaluate }
63
76
  }
64
77
 
65
78
  /**
@@ -68,7 +81,7 @@ function getMath () {
68
81
  * @param {*} value
69
82
  */
70
83
  function format (value) {
71
- const math = getMath()
84
+ const { math } = getMath()
72
85
 
73
86
  return math.format(value, {
74
87
  fn: function (value) {
@@ -88,7 +101,7 @@ function format (value) {
88
101
  * @return {[Array, String]} completions
89
102
  */
90
103
  function completer (text) {
91
- const math = getMath()
104
+ const { math } = getMath()
92
105
  let matches = []
93
106
  let keyword
94
107
  const m = /[a-zA-Z_0-9]+$/.exec(text)
@@ -183,7 +196,7 @@ function runStream (input, output, mode, parenthesis) {
183
196
  }
184
197
 
185
198
  // load math.js now, right *after* loading the prompt.
186
- const math = getMath()
199
+ const { math, parse } = getMath()
187
200
 
188
201
  // TODO: automatic insertion of 'ans' before operators like +, -, *, /
189
202
 
@@ -214,7 +227,7 @@ function runStream (input, output, mode, parenthesis) {
214
227
  case 'evaluate':
215
228
  // evaluate expression
216
229
  try {
217
- let node = math.parse(expr)
230
+ let node = parse(expr)
218
231
  let res = node.evaluate(scope)
219
232
 
220
233
  if (math.isResultSet(res)) {
@@ -288,7 +301,7 @@ function runStream (input, output, mode, parenthesis) {
288
301
  * @return {string | null} Returns the name when found, else returns null.
289
302
  */
290
303
  function findSymbolName (node) {
291
- const math = getMath()
304
+ const { math } = getMath()
292
305
  let n = node
293
306
 
294
307
  while (n) {
@@ -412,9 +425,10 @@ if (version) {
412
425
  // run a stream, can be user input or pipe input
413
426
  runStream(process.stdin, process.stdout, mode, parenthesis)
414
427
  } else {
415
- fs.stat(scripts[0], function (e, f) {
416
- if (e) {
417
- console.log(getMath().evaluate(scripts.join(' ')).toString())
428
+ fs.stat(scripts[0], function (err) {
429
+ if (err) {
430
+ const { evaluate } = getMath()
431
+ console.log(evaluate(scripts.join(' ')).toString())
418
432
  } else {
419
433
  // work through the queue of scripts
420
434
  scripts.forEach(function (arg) {