Projet

Général

Profil

Révision 01dfd3b5

Ajouté par Assos Assos il y a plus de 3 ans

Udpate to 7.77

Voir les différences:

drupal7/CHANGELOG.txt
1
Drupal 7.77, 2020-12-03
2
-----------------------
3
- Hotfix for schema.prefixed tables
4

  
5
Drupal 7.76, 2020-12-02
6
-----------------------
7
- Support for MySQL 8
8
- Core tests pass in SQLite
9
- Better user flood control logging
10

  
11
Drupal 7.75, 2020-11-26
12
-----------------------
13
- Fixed security issues:
14
   - SA-CORE-2020-013
15

  
1 16
Drupal 7.74, 2020-11-17
2 17
-----------------------
3 18
- Fixed security issues:
drupal7/MAINTAINERS.txt
12 12

  
13 13
- Dries Buytaert 'dries' https://www.drupal.org/u/dries
14 14
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
15
- (provisional) Drew Webber 'mcdruid' https://www.drupal.org/u/mcdruid
15
- Drew Webber 'mcdruid' https://www.drupal.org/u/mcdruid
16 16

  
17 17

  
18 18
Component maintainers
drupal7/includes/bootstrap.inc
8 8
/**
9 9
 * The current system version.
10 10
 */
11
define('VERSION', '7.74');
11
define('VERSION', '7.77');
12 12

  
13 13
/**
14 14
 * Core API compatibility.
......
1189 1189
    $variables = $cached->data;
1190 1190
  }
1191 1191
  else {
1192
    // Cache miss. Avoid a stampede.
1192
    // Cache miss. Avoid a stampede by acquiring a lock. If the lock fails to
1193
    // acquire, optionally just continue with uncached processing.
1193 1194
    $name = 'variable_init';
1194
    if (!lock_acquire($name, 1)) {
1195
      // Another request is building the variable cache.
1196
      // Wait, then re-run this function.
1195
    $lock_acquired = lock_acquire($name, 1);
1196
    if (!$lock_acquired && variable_get('variable_initialize_wait_for_lock', FALSE)) {
1197 1197
      lock_wait($name);
1198 1198
      return variable_initialize($conf);
1199 1199
    }
1200 1200
    else {
1201
      // Proceed with variable rebuild.
1201
      // Load the variables from the table.
1202 1202
      $variables = array_map('unserialize', db_query('SELECT name, value FROM {variable}')->fetchAllKeyed());
1203
      cache_set('variables', $variables, 'cache_bootstrap');
1204
      lock_release($name);
1203
      if ($lock_acquired) {
1204
        cache_set('variables', $variables, 'cache_bootstrap');
1205
        lock_release($name);
1206
      }
1205 1207
    }
1206 1208
  }
1207 1209

  
drupal7/includes/common.inc
6653 6653
  $sort = isset($elements['#sorted']) ? !$elements['#sorted'] : $sort;
6654 6654

  
6655 6655
  // Filter out properties from the element, leaving only children.
6656
  $children = array();
6656
  $count = count($elements);
6657
  $child_weights = array();
6658
  $i = 0;
6657 6659
  $sortable = FALSE;
6658 6660
  foreach ($elements as $key => $value) {
6659 6661
    if (is_int($key) || $key === '' || $key[0] !== '#') {
6660
      $children[$key] = $value;
6661 6662
      if (is_array($value) && isset($value['#weight'])) {
6663
        $weight = $value['#weight'];
6662 6664
        $sortable = TRUE;
6663 6665
      }
6666
      else {
6667
        $weight = 0;
6668
      }
6669
      // Support weights with up to three digit precision and conserve the
6670
      // insertion order.
6671
      $child_weights[$key] = floor($weight * 1000) + $i / $count;
6664 6672
    }
6673
    $i++;
6665 6674
  }
6675

  
6666 6676
  // Sort the children if necessary.
6667 6677
  if ($sort && $sortable) {
6668
    uasort($children, 'element_sort');
6678
    asort($child_weights);
6669 6679
    // Put the sorted children back into $elements in the correct order, to
6670 6680
    // preserve sorting if the same element is passed through
6671 6681
    // element_children() twice.
6672
    foreach ($children as $key => $child) {
6682
    foreach ($child_weights as $key => $weight) {
6683
      $value = $elements[$key];
6673 6684
      unset($elements[$key]);
6674
      $elements[$key] = $child;
6685
      $elements[$key] = $value;
6675 6686
    }
6676 6687
    $elements['#sorted'] = TRUE;
6677 6688
  }
6678 6689

  
6679
  return array_keys($children);
6690
  return array_keys($child_weights);
6680 6691
}
6681 6692

  
6682 6693
/**
drupal7/includes/database/database.inc
310 310
   */
311 311
  protected $escapedAliases = array();
312 312

  
313
  /**
314
   * List of un-prefixed table names, keyed by prefixed table names.
315
   *
316
   * @var array
317
   */
318
  protected $unprefixedTablesMap = array();
319

  
313 320
  function __construct($dsn, $username, $password, $driver_options = array()) {
314 321
    // Initialize and prepare the connection prefix.
315 322
    $this->setPrefix(isset($this->connectionOptions['prefix']) ? $this->connectionOptions['prefix'] : '');
......
338 345
    // Destroy all references to this connection by setting them to NULL.
339 346
    // The Statement class attribute only accepts a new value that presents a
340 347
    // proper callable, so we reset it to PDOStatement.
341
    $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array()));
348
    if (!empty($this->statementClass)) {
349
      $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array()));
350
    }
342 351
    $this->schema = NULL;
343 352
  }
344 353

  
......
442 451
    $this->prefixReplace[] = $this->prefixes['default'];
443 452
    $this->prefixSearch[] = '}';
444 453
    $this->prefixReplace[] = '';
454

  
455
    // Set up a map of prefixed => un-prefixed tables.
456
    foreach ($this->prefixes as $table_name => $prefix) {
457
      if ($table_name !== 'default') {
458
        $this->unprefixedTablesMap[$prefix . $table_name] = $table_name;
459
      }
460
    }
445 461
  }
446 462

  
447 463
  /**
......
477 493
    }
478 494
  }
479 495

  
496
  /**
497
   * Gets a list of individually prefixed table names.
498
   *
499
   * @return array
500
   *   An array of un-prefixed table names, keyed by their fully qualified table
501
   *   names (i.e. prefix + table_name).
502
   */
503
  public function getUnprefixedTablesMap() {
504
    return $this->unprefixedTablesMap;
505
  }
506

  
480 507
  /**
481 508
   * Prepares a query string and returns the prepared statement.
482 509
   *
......
2840 2867
 *
2841 2868
 * @param $table_expression
2842 2869
 *   An SQL expression, for example "simpletest%" (without the quotes).
2843
 *   BEWARE: this is not prefixed, the caller should take care of that.
2844 2870
 *
2845 2871
 * @return
2846 2872
 *   Array, both the keys and the values are the matching tables.
......
2849 2875
  return Database::getConnection()->schema()->findTables($table_expression);
2850 2876
}
2851 2877

  
2878
/**
2879
 * Finds all tables that are like the specified base table name. This is a
2880
 * backport of the change made to db_find_tables in Drupal 8 to work with
2881
 * virtual, un-prefixed table names. The original function is retained for
2882
 * Backwards Compatibility.
2883
 * @see https://www.drupal.org/node/2552435
2884
 *
2885
 * @param $table_expression
2886
 *   An SQL expression, for example "simpletest%" (without the quotes).
2887
 *
2888
 * @return
2889
 *   Array, both the keys and the values are the matching tables.
2890
 */
2891
function db_find_tables_d8($table_expression) {
2892
  return Database::getConnection()->schema()->findTablesD8($table_expression);
2893
}
2894

  
2852 2895
function _db_create_keys_sql($spec) {
2853 2896
  return Database::getConnection()->schema()->createKeysSql($spec);
2854 2897
}
drupal7/includes/database/mysql/database.inc
5 5
 * Database interface code for MySQL database servers.
6 6
 */
7 7

  
8
/**
9
 * The default character for quoting identifiers in MySQL.
10
 */
11
define('MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT', '`');
12

  
8 13
/**
9 14
 * @addtogroup database
10 15
 * @{
......
19 24
   */
20 25
  protected $needsCleanup = FALSE;
21 26

  
27
  /**
28
   * The list of MySQL reserved key words.
29
   *
30
   * @link https://dev.mysql.com/doc/refman/8.0/en/keywords.html
31
   */
32
  private $reservedKeyWords = array(
33
    'accessible',
34
    'add',
35
    'admin',
36
    'all',
37
    'alter',
38
    'analyze',
39
    'and',
40
    'as',
41
    'asc',
42
    'asensitive',
43
    'before',
44
    'between',
45
    'bigint',
46
    'binary',
47
    'blob',
48
    'both',
49
    'by',
50
    'call',
51
    'cascade',
52
    'case',
53
    'change',
54
    'char',
55
    'character',
56
    'check',
57
    'collate',
58
    'column',
59
    'condition',
60
    'constraint',
61
    'continue',
62
    'convert',
63
    'create',
64
    'cross',
65
    'cube',
66
    'cume_dist',
67
    'current_date',
68
    'current_time',
69
    'current_timestamp',
70
    'current_user',
71
    'cursor',
72
    'database',
73
    'databases',
74
    'day_hour',
75
    'day_microsecond',
76
    'day_minute',
77
    'day_second',
78
    'dec',
79
    'decimal',
80
    'declare',
81
    'default',
82
    'delayed',
83
    'delete',
84
    'dense_rank',
85
    'desc',
86
    'describe',
87
    'deterministic',
88
    'distinct',
89
    'distinctrow',
90
    'div',
91
    'double',
92
    'drop',
93
    'dual',
94
    'each',
95
    'else',
96
    'elseif',
97
    'empty',
98
    'enclosed',
99
    'escaped',
100
    'except',
101
    'exists',
102
    'exit',
103
    'explain',
104
    'false',
105
    'fetch',
106
    'first_value',
107
    'float',
108
    'float4',
109
    'float8',
110
    'for',
111
    'force',
112
    'foreign',
113
    'from',
114
    'fulltext',
115
    'function',
116
    'generated',
117
    'get',
118
    'grant',
119
    'group',
120
    'grouping',
121
    'groups',
122
    'having',
123
    'high_priority',
124
    'hour_microsecond',
125
    'hour_minute',
126
    'hour_second',
127
    'if',
128
    'ignore',
129
    'in',
130
    'index',
131
    'infile',
132
    'inner',
133
    'inout',
134
    'insensitive',
135
    'insert',
136
    'int',
137
    'int1',
138
    'int2',
139
    'int3',
140
    'int4',
141
    'int8',
142
    'integer',
143
    'interval',
144
    'into',
145
    'io_after_gtids',
146
    'io_before_gtids',
147
    'is',
148
    'iterate',
149
    'join',
150
    'json_table',
151
    'key',
152
    'keys',
153
    'kill',
154
    'lag',
155
    'last_value',
156
    'lead',
157
    'leading',
158
    'leave',
159
    'left',
160
    'like',
161
    'limit',
162
    'linear',
163
    'lines',
164
    'load',
165
    'localtime',
166
    'localtimestamp',
167
    'lock',
168
    'long',
169
    'longblob',
170
    'longtext',
171
    'loop',
172
    'low_priority',
173
    'master_bind',
174
    'master_ssl_verify_server_cert',
175
    'match',
176
    'maxvalue',
177
    'mediumblob',
178
    'mediumint',
179
    'mediumtext',
180
    'middleint',
181
    'minute_microsecond',
182
    'minute_second',
183
    'mod',
184
    'modifies',
185
    'natural',
186
    'not',
187
    'no_write_to_binlog',
188
    'nth_value',
189
    'ntile',
190
    'null',
191
    'numeric',
192
    'of',
193
    'on',
194
    'optimize',
195
    'optimizer_costs',
196
    'option',
197
    'optionally',
198
    'or',
199
    'order',
200
    'out',
201
    'outer',
202
    'outfile',
203
    'over',
204
    'partition',
205
    'percent_rank',
206
    'persist',
207
    'persist_only',
208
    'precision',
209
    'primary',
210
    'procedure',
211
    'purge',
212
    'range',
213
    'rank',
214
    'read',
215
    'reads',
216
    'read_write',
217
    'real',
218
    'recursive',
219
    'references',
220
    'regexp',
221
    'release',
222
    'rename',
223
    'repeat',
224
    'replace',
225
    'require',
226
    'resignal',
227
    'restrict',
228
    'return',
229
    'revoke',
230
    'right',
231
    'rlike',
232
    'row',
233
    'rows',
234
    'row_number',
235
    'schema',
236
    'schemas',
237
    'second_microsecond',
238
    'select',
239
    'sensitive',
240
    'separator',
241
    'set',
242
    'show',
243
    'signal',
244
    'smallint',
245
    'spatial',
246
    'specific',
247
    'sql',
248
    'sqlexception',
249
    'sqlstate',
250
    'sqlwarning',
251
    'sql_big_result',
252
    'sql_calc_found_rows',
253
    'sql_small_result',
254
    'ssl',
255
    'starting',
256
    'stored',
257
    'straight_join',
258
    'system',
259
    'table',
260
    'terminated',
261
    'then',
262
    'tinyblob',
263
    'tinyint',
264
    'tinytext',
265
    'to',
266
    'trailing',
267
    'trigger',
268
    'true',
269
    'undo',
270
    'union',
271
    'unique',
272
    'unlock',
273
    'unsigned',
274
    'update',
275
    'usage',
276
    'use',
277
    'using',
278
    'utc_date',
279
    'utc_time',
280
    'utc_timestamp',
281
    'values',
282
    'varbinary',
283
    'varchar',
284
    'varcharacter',
285
    'varying',
286
    'virtual',
287
    'when',
288
    'where',
289
    'while',
290
    'window',
291
    'with',
292
    'write',
293
    'xor',
294
    'year_month',
295
    'zerofill',
296
  );
297

  
22 298
  public function __construct(array $connection_options = array()) {
23 299
    // This driver defaults to transaction support, except if explicitly passed FALSE.
24 300
    $this->transactionSupport = !isset($connection_options['transactions']) || ($connection_options['transactions'] !== FALSE);
......
86 362
    $connection_options += array(
87 363
      'init_commands' => array(),
88 364
    );
365

  
366
    $sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO';
367
    // NO_AUTO_CREATE_USER was removed in MySQL 8.0.11
368
    // https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-deprecation-removal
369
    if (version_compare($this->getAttribute(PDO::ATTR_SERVER_VERSION), '8.0.11', '<')) {
370
      $sql_mode .= ',NO_AUTO_CREATE_USER';
371
    }
89 372
    $connection_options['init_commands'] += array(
90
      'sql_mode' => "SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'",
373
      'sql_mode' => "SET sql_mode = '$sql_mode'",
91 374
    );
375

  
92 376
    // Execute initial commands.
93 377
    foreach ($connection_options['init_commands'] as $sql) {
94 378
      $this->exec($sql);
95 379
    }
96 380
  }
97 381

  
382
  /**
383
   * {@inheritdoc}}
384
   */
385
  protected function setPrefix($prefix) {
386
    parent::setPrefix($prefix);
387
    // Successive versions of MySQL have become increasingly strict about the
388
    // use of reserved keywords as table names. Drupal 7 uses at least one such
389
    // table (system). Therefore we surround all table names with quotes.
390
    $quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT);
391
    foreach ($this->prefixSearch as $i => $prefixSearch) {
392
      if (substr($prefixSearch, 0, 1) === '{') {
393
        // If the prefix already contains one or more quotes remove them.
394
        // This can happen when - for example - DrupalUnitTestCase sets up a
395
        // "temporary prefixed database". Also if there's a dot in the prefix,
396
        // wrap it in quotes to cater for schema names in prefixes.
397
        $search = array($quote_char, '.');
398
        $replace = array('', $quote_char . '.' . $quote_char);
399
        $this->prefixReplace[$i] = $quote_char . str_replace($search, $replace, $this->prefixReplace[$i]);
400
      }
401
      if (substr($prefixSearch, -1) === '}') {
402
        $this->prefixReplace[$i] .= $quote_char;
403
      }
404
    }
405
  }
406

  
407
  /**
408
   * {@inheritdoc}
409
   */
410
  public function escapeField($field) {
411
    $field = parent::escapeField($field);
412
    return $this->quoteIdentifier($field);
413
  }
414

  
415
  public function escapeFields(array $fields) {
416
    foreach ($fields as &$field) {
417
      $field = $this->escapeField($field);
418
    }
419
    return $fields;
420
  }
421

  
422
  /**
423
   * {@inheritdoc}
424
   */
425
  public function escapeAlias($field) {
426
    $field = parent::escapeAlias($field);
427
    return $this->quoteIdentifier($field);
428
  }
429

  
430
  /**
431
   * Quotes an identifier if it matches a MySQL reserved keyword.
432
   *
433
   * @param string $identifier
434
   *   The field to check.
435
   *
436
   * @return string
437
   *   The identifier, quoted if it matches a MySQL reserved keyword.
438
   */
439
  private function quoteIdentifier($identifier) {
440
    // Quote identifiers so that MySQL reserved words like 'function' can be
441
    // used as column names. Sometimes the 'table.column_name' format is passed
442
    // in. For example, menu_load_links() adds a condition on "ml.menu_name".
443
    if (strpos($identifier, '.') !== FALSE) {
444
      list($table, $identifier) = explode('.', $identifier, 2);
445
    }
446
    if (in_array(strtolower($identifier), $this->reservedKeyWords, TRUE)) {
447
      // Quote the string for MySQL reserved keywords.
448
      $quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT);
449
      $identifier = $quote_char . $identifier . $quote_char;
450
    }
451
    return isset($table) ? $table . '.' . $identifier : $identifier;
452
  }
453

  
98 454
  public function __destruct() {
99 455
    if ($this->needsCleanup) {
100 456
      $this->nextIdDelete();
drupal7/includes/database/mysql/query.inc
48 48
    // Default fields are always placed first for consistency.
49 49
    $insert_fields = array_merge($this->defaultFields, $this->insertFields);
50 50

  
51
    if (method_exists($this->connection, 'escapeFields')) {
52
      $insert_fields = $this->connection->escapeFields($insert_fields);
53
    }
54

  
51 55
    // If we're selecting from a SelectQuery, finish building the query and
52 56
    // pass it back, as any remaining options are irrelevant.
53 57
    if (!empty($this->fromQuery)) {
......
89 93

  
90 94
class TruncateQuery_mysql extends TruncateQuery { }
91 95

  
96
class UpdateQuery_mysql extends UpdateQuery {
97
  public function __toString() {
98
    if (method_exists($this->connection, 'escapeField')) {
99
      $escapedFields = array();
100
      foreach ($this->fields as $field => $data) {
101
        $field = $this->connection->escapeField($field);
102
        $escapedFields[$field] = $data;
103
      }
104
      $this->fields = $escapedFields;
105
    }
106
    return parent::__toString();
107
  }
108
}
109

  
92 110
/**
93 111
 * @} End of "addtogroup database".
94 112
 */
drupal7/includes/database/mysql/schema.inc
57 57
  protected function buildTableNameCondition($table_name, $operator = '=', $add_prefix = TRUE) {
58 58
    $info = $this->connection->getConnectionOptions();
59 59

  
60
    // Ensure the table name is not surrounded with quotes as that is not
61
    // appropriate for schema queries.
62
    $quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT);
63
    $table_name = str_replace($quote_char, '', $table_name);
64

  
60 65
    $table_info = $this->getPrefixInfo($table_name, $add_prefix);
61 66

  
62 67
    $condition = new DatabaseCondition('AND');
......
494 499
      $condition->condition('column_name', $column);
495 500
      $condition->compile($this->connection, $this);
496 501
      // Don't use {} around information_schema.columns table.
497
      return $this->connection->query("SELECT column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField();
502
      return $this->connection->query("SELECT column_comment AS column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField();
498 503
    }
499 504
    $condition->compile($this->connection, $this);
500 505
    // Don't use {} around information_schema.tables table.
501
    $comment = $this->connection->query("SELECT table_comment FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchField();
506
    $comment = $this->connection->query("SELECT table_comment AS table_comment FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchField();
502 507
    // Work-around for MySQL 5.0 bug http://bugs.mysql.com/bug.php?id=11379
503 508
    return preg_replace('/; InnoDB free:.*$/', '', $comment);
504 509
  }
drupal7/includes/database/schema.inc
169 169
 */
170 170
abstract class DatabaseSchema implements QueryPlaceholderInterface {
171 171

  
172
  /**
173
   * The database connection.
174
   *
175
   * @var DatabaseConnection
176
   */
172 177
  protected $connection;
173 178

  
174 179
  /**
......
343 348
    // couldn't use db_select() here because it would prefix
344 349
    // information_schema.tables and the query would fail.
345 350
    // Don't use {} around information_schema.tables table.
346
    return $this->connection->query("SELECT table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchAllKeyed(0, 0);
351
    return $this->connection->query("SELECT table_name AS table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchAllKeyed(0, 0);
352
  }
353

  
354
  /**
355
   * Finds all tables that are like the specified base table name. This is a
356
   * backport of the change made to findTables in Drupal 8 to work with virtual,
357
   * un-prefixed table names. The original function is retained for Backwards
358
   * Compatibility.
359
   * @see https://www.drupal.org/node/2552435
360
   *
361
   * @param string $table_expression
362
   *   An SQL expression, for example "cache_%" (without the quotes).
363
   *
364
   * @return array
365
   *   Both the keys and the values are the matching tables.
366
   */
367
  public function findTablesD8($table_expression) {
368
    // Load all the tables up front in order to take into account per-table
369
    // prefixes. The actual matching is done at the bottom of the method.
370
    $condition = $this->buildTableNameCondition('%', 'LIKE');
371
    $condition->compile($this->connection, $this);
372

  
373
    $individually_prefixed_tables = $this->connection->getUnprefixedTablesMap();
374
    $default_prefix = $this->connection->tablePrefix();
375
    $default_prefix_length = strlen($default_prefix);
376
    $tables = array();
377
    // Normally, we would heartily discourage the use of string
378
    // concatenation for conditionals like this however, we
379
    // couldn't use db_select() here because it would prefix
380
    // information_schema.tables and the query would fail.
381
    // Don't use {} around information_schema.tables table.
382
    $results = $this->connection->query("SELECT table_name AS table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments());
383
    foreach ($results as $table) {
384
      // Take into account tables that have an individual prefix.
385
      if (isset($individually_prefixed_tables[$table->table_name])) {
386
        $prefix_length = strlen($this->connection->tablePrefix($individually_prefixed_tables[$table->table_name]));
387
      }
388
      elseif ($default_prefix && substr($table->table_name, 0, $default_prefix_length) !== $default_prefix) {
389
        // This table name does not start the default prefix, which means that
390
        // it is not managed by Drupal so it should be excluded from the result.
391
        continue;
392
      }
393
      else {
394
        $prefix_length = $default_prefix_length;
395
      }
396

  
397
      // Remove the prefix from the returned tables.
398
      $unprefixed_table_name = substr($table->table_name, $prefix_length);
399

  
400
      // The pattern can match a table which is the same as the prefix. That
401
      // will become an empty string when we remove the prefix, which will
402
      // probably surprise the caller, besides not being a prefixed table. So
403
      // remove it.
404
      if (!empty($unprefixed_table_name)) {
405
        $tables[$unprefixed_table_name] = $unprefixed_table_name;
406
      }
407
    }
408

  
409
    // Convert the table expression from its SQL LIKE syntax to a regular
410
    // expression and escape the delimiter that will be used for matching.
411
    $table_expression = str_replace(array('%', '_'), array('.*?', '.'), preg_quote($table_expression, '/'));
412
    $tables = preg_grep('/^' . $table_expression . '$/i', $tables);
413

  
414
    return $tables;
347 415
  }
348 416

  
349 417
  /**
drupal7/includes/database/select.inc
1520 1520
    $fields = array();
1521 1521
    foreach ($this->tables as $alias => $table) {
1522 1522
      if (!empty($table['all_fields'])) {
1523
        $fields[] = $this->connection->escapeTable($alias) . '.*';
1523
        $fields[] = $this->connection->escapeAlias($alias) . '.*';
1524 1524
      }
1525 1525
    }
1526 1526
    foreach ($this->fields as $alias => $field) {
1527
      // Note that $field['table'] holds the table alias.
1528
      // @see \SelectQuery::addField
1529
      $table = isset($field['table']) ? $this->connection->escapeAlias($field['table']) . '.' : '';
1527 1530
      // Always use the AS keyword for field aliases, as some
1528 1531
      // databases require it (e.g., PostgreSQL).
1529
      $fields[] = (isset($field['table']) ? $this->connection->escapeTable($field['table']) . '.' : '') . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeAlias($field['alias']);
1532
      $fields[] = $table . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeAlias($field['alias']);
1530 1533
    }
1531 1534
    foreach ($this->expressions as $alias => $expression) {
1532 1535
      $fields[] = $expression['expression'] . ' AS ' . $this->connection->escapeAlias($expression['alias']);
......
1555 1558

  
1556 1559
      // Don't use the AS keyword for table aliases, as some
1557 1560
      // databases don't support it (e.g., Oracle).
1558
      $query .=  $table_string . ' ' . $this->connection->escapeTable($table['alias']);
1561
      $query .=  $table_string . ' ' . $this->connection->escapeAlias($table['alias']);
1559 1562

  
1560 1563
      if (!empty($table['condition'])) {
1561 1564
        $query .= ' ON ' . $table['condition'];
drupal7/includes/database/sqlite/database.inc
107 107
    $this->sqliteCreateFunction('substring_index', array($this, 'sqlFunctionSubstringIndex'), 3);
108 108
    $this->sqliteCreateFunction('rand', array($this, 'sqlFunctionRand'));
109 109

  
110
    // Enable the Write-Ahead Logging (WAL) option for SQLite if supported.
111
    // @see https://www.drupal.org/node/2348137
112
    // @see https://sqlite.org/wal.html
113
    if (version_compare($version, '3.7') >= 0) {
114
      $connection_options += array(
115
        'init_commands' => array(),
116
      );
117
      $connection_options['init_commands'] += array(
118
        'wal' => "PRAGMA journal_mode=WAL",
119
      );
120
    }
121

  
110 122
    // Execute sqlite init_commands.
111 123
    if (isset($connection_options['init_commands'])) {
112 124
      $this->exec(implode('; ', $connection_options['init_commands']));
......
128 140
          $count = $this->query('SELECT COUNT(*) FROM ' . $prefix . '.sqlite_master WHERE type = :type AND name NOT LIKE :pattern', array(':type' => 'table', ':pattern' => 'sqlite_%'))->fetchField();
129 141

  
130 142
          // We can prune the database file if it doesn't have any tables.
131
          if ($count == 0) {
132
            // Detach the database.
133
            $this->query('DETACH DATABASE :schema', array(':schema' => $prefix));
134
            // Destroy the database file.
143
          if ($count == 0 && $this->connectionOptions['database'] != ':memory:') {
144
            // Detaching the database fails at this point, but no other queries
145
            // are executed after the connection is destructed so we can simply
146
            // remove the database file.
135 147
            unlink($this->connectionOptions['database'] . '-' . $prefix);
136 148
          }
137 149
        }
......
143 155
    }
144 156
  }
145 157

  
158
  /**
159
   * Gets all the attached databases.
160
   *
161
   * @return array
162
   *   An array of attached database names.
163
   *
164
   * @see DatabaseConnection_sqlite::__construct().
165
   */
166
  public function getAttachedDatabases() {
167
    return $this->attachedDatabases;
168
  }
169

  
146 170
  /**
147 171
   * SQLite compatibility implementation for the IF() SQL function.
148 172
   */
drupal7/includes/database/sqlite/query.inc
23 23
    if (!$this->preExecute()) {
24 24
      return NULL;
25 25
    }
26
    if (count($this->insertFields)) {
26
    if (count($this->insertFields) || !empty($this->fromQuery)) {
27 27
      return parent::execute();
28 28
    }
29 29
    else {
......
36 36
    $comments = $this->connection->makeComment($this->comments);
37 37

  
38 38
    // Produce as many generic placeholders as necessary.
39
    $placeholders = array_fill(0, count($this->insertFields), '?');
39
    $placeholders = array();
40
    if (!empty($this->insertFields)) {
41
      $placeholders = array_fill(0, count($this->insertFields), '?');
42
    }
40 43

  
41 44
    // If we're selecting from a SelectQuery, finish building the query and
42 45
    // pass it back, as any remaining options are irrelevant.
drupal7/includes/database/sqlite/schema.inc
668 668
    $this->alterTable($table, $old_schema, $new_schema);
669 669
  }
670 670

  
671
  /**
672
   * {@inheritdoc}
673
   */
671 674
  public function findTables($table_expression) {
672 675
    // Don't add the prefix, $table_expression already includes the prefix.
673 676
    $info = $this->getPrefixInfo($table_expression, FALSE);
......
680 683
    ));
681 684
    return $result->fetchAllKeyed(0, 0);
682 685
  }
686

  
687
  /**
688
   * {@inheritdoc}
689
   */
690
  public function findTablesD8($table_expression) {
691
    $tables = array();
692

  
693
    // The SQLite implementation doesn't need to use the same filtering strategy
694
    // as the parent one because individually prefixed tables live in their own
695
    // schema (database), which means that neither the main database nor any
696
    // attached one will contain a prefixed table name, so we just need to loop
697
    // over all known schemas and filter by the user-supplied table expression.
698
    $attached_dbs = $this->connection->getAttachedDatabases();
699
    foreach ($attached_dbs as $schema) {
700
      // Can't use query placeholders for the schema because the query would
701
      // have to be :prefixsqlite_master, which does not work. We also need to
702
      // ignore the internal SQLite tables.
703
      $result = db_query("SELECT name FROM " . $schema . ".sqlite_master WHERE type = :type AND name LIKE :table_name AND name NOT LIKE :pattern", array(
704
        ':type' => 'table',
705
        ':table_name' => $table_expression,
706
        ':pattern' => 'sqlite_%',
707
      ));
708
      $tables += $result->fetchAllKeyed(0, 0);
709
    }
710

  
711
    return $tables;
712
  }
713

  
683 714
}
drupal7/includes/form.inc
1361 1361
    // The following errors are always shown.
1362 1362
    if (isset($elements['#needs_validation'])) {
1363 1363
      // Verify that the value is not longer than #maxlength.
1364
      if (isset($elements['#maxlength']) && drupal_strlen($elements['#value']) > $elements['#maxlength']) {
1364
      if (isset($elements['#maxlength']) && (isset($elements['#value']) && !is_scalar($elements['#value']))) {
1365
        form_error($elements, $t('An illegal value has been detected. Please contact the site administrator.'));
1366
      }
1367
      elseif (isset($elements['#maxlength']) && drupal_strlen($elements['#value']) > $elements['#maxlength']) {
1365 1368
        form_error($elements, $t('!name cannot be longer than %max characters but is currently %length characters long.', array('!name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'], '%max' => $elements['#maxlength'], '%length' => drupal_strlen($elements['#value']))));
1366 1369
      }
1367 1370

  
......
4124 4127
  $max_elements = variable_get('drupal_weight_select_max', DRUPAL_WEIGHT_SELECT_MAX);
4125 4128
  if ($element['#delta'] <= $max_elements) {
4126 4129
    $element['#type'] = 'select';
4130
    $weights = array();
4127 4131
    for ($n = (-1 * $element['#delta']); $n <= $element['#delta']; $n++) {
4128 4132
      $weights[$n] = $n;
4129 4133
    }
4134
    if (isset($element['#default_value'])) {
4135
      $default_value = (int) $element['#default_value'];
4136
      if (!isset($weights[$default_value])) {
4137
        $weights[$default_value] = $default_value;
4138
        ksort($weights);
4139
      }
4140
    }
4130 4141
    $element['#options'] = $weights;
4131 4142
    $element += element_info('select');
4132 4143
  }
drupal7/includes/mail.inc
12 12
 */
13 13
define('MAIL_LINE_ENDINGS', isset($_SERVER['WINDIR']) || (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE) ? "\r\n" : "\n");
14 14

  
15

  
16
/**
17
 * Special characters, defined in RFC_2822.
18
 */
19
define('MAIL_RFC_2822_SPECIALS', '()<>[]:;@\,."');
20

  
15 21
/**
16 22
 * Composes and optionally sends an e-mail message.
17 23
 *
......
148 154
    // Return-Path headers should have a domain authorized to use the originating
149 155
    // SMTP server.
150 156
    $headers['From'] = $headers['Sender'] = $headers['Return-Path'] = $default_from;
157

  
158
    if (variable_get('mail_display_name_site_name', FALSE)) {
159
      $display_name = variable_get('site_name', 'Drupal');
160
      $headers['From'] = drupal_mail_format_display_name($display_name) . ' <' . $default_from . '>';
161
    }
151 162
  }
152
  if ($from) {
163
  if ($from && $from != $default_from) {
153 164
    $headers['From'] = $from;
154 165
  }
155 166
  $message['headers'] = $headers;
......
557 568
  return $output . $footnotes;
558 569
}
559 570

  
571
/**
572
 * Return a RFC-2822 compliant "display-name" component.
573
 *
574
 * The "display-name" component is used in mail header "Originator" fields
575
 * (From, Sender, Reply-to) to give a human-friendly description of the
576
 * address, i.e. From: My Display Name <xyz@example.org>. RFC-822 and
577
 * RFC-2822 define its syntax and rules. This method gets as input a string
578
 * to be used as "display-name" and formats it to be RFC compliant.
579
 *
580
 * @param string $string
581
 *   A string to be used as "display-name".
582
 *
583
 * @return string
584
 *   A RFC compliant version of the string, ready to be used as
585
 *   "display-name" in mail originator header fields.
586
 */
587
function drupal_mail_format_display_name($string) {
588
  // Make sure we don't process html-encoded characters. They may create
589
  // unneeded trouble if left encoded, besides they will be correctly
590
  // processed if decoded.
591
  $string = decode_entities($string);
592

  
593
  // If string contains non-ASCII characters it must be (short) encoded
594
  // according to RFC-2047. The output of a "B" (Base64) encoded-word is
595
  // always safe to be used as display-name.
596
  $safe_display_name = mime_header_encode($string, TRUE);
597

  
598
  // Encoded-words are always safe to be used as display-name because don't
599
  // contain any RFC 2822 "specials" characters. However
600
  // mimeHeaderEncode() encodes a string only if it contains any
601
  // non-ASCII characters, and leaves its value untouched (un-encoded) if
602
  // ASCII only. For this reason in order to produce a valid display-name we
603
  // still need to make sure there are no "specials" characters left.
604
  if (preg_match('/[' . preg_quote(MAIL_RFC_2822_SPECIALS) . ']/', $safe_display_name)) {
605

  
606
    // If string is already quoted, it may or may not be escaped properly, so
607
    // don't trust it and reset.
608
    if (preg_match('/^"(.+)"$/', $safe_display_name, $matches)) {
609
      $safe_display_name = str_replace(array('\\\\', '\\"'), array('\\', '"'), $matches[1]);
610
    }
611

  
612
    // Transform the string in a RFC-2822 "quoted-string" by wrapping it in
613
    // double-quotes. Also make sure '"' and '\' occurrences are escaped.
614
    $safe_display_name = '"' . str_replace(array('\\', '"'), array('\\\\', '\\"'), $safe_display_name) . '"';
615
  }
616

  
617
  return $safe_display_name;
618
}
619

  
560 620
/**
561 621
 * Wraps words on a single line.
562 622
 *
563
 * Callback for array_walk() winthin drupal_wrap_mail().
623
 * Callback for array_walk() within drupal_wrap_mail().
564 624
 */
565 625
function _drupal_wrap_mail_line(&$line, $key, $values) {
566 626
  // Use soft-breaks only for purely quoted or unindented text.
drupal7/includes/menu.inc
1067 1067
    // the active class accordingly. But local tasks do not appear in menu
1068 1068
    // trees, so if the current path is a local task, and this link is its
1069 1069
    // tab root, then we have to set the class manually.
1070
    if ($data['link']['href'] == $router_item['tab_root_href'] && $data['link']['href'] != $_GET['q']) {
1070
    if ($router_item && $data['link']['href'] == $router_item['tab_root_href'] && $data['link']['href'] != $_GET['q']) {
1071 1071
      $data['link']['localized_options']['attributes']['class'][] = 'active';
1072 1072
    }
1073 1073

  
drupal7/misc/jquery.js
1

  
2 1
/*!
3 2
 * jQuery JavaScript Library v1.4.4
4 3
 * http://jquery.com/
drupal7/modules/aggregator/aggregator.info
7 7
configure = admin/config/services/aggregator/settings
8 8
stylesheets[all][] = aggregator.css
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/aggregator/tests/aggregator_test.info
5 5
core = 7.x
6 6
hidden = TRUE
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/block/block.info
6 6
files[] = block.test
7 7
configure = admin/structure/block
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/block/tests/block_test.info
5 5
core = 7.x
6 6
hidden = TRUE
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/block/tests/themes/block_test_theme/block_test_theme.info
13 13
regions[highlighted] = Highlighted
14 14
regions[help] = Help
15 15

  
16
; Information added by Drupal.org packaging script on 2020-11-18
17
version = "7.74"
16
; Information added by Drupal.org packaging script on 2020-12-03
17
version = "7.77"
18 18
project = "drupal"
19
datestamp = "1605718477"
19
datestamp = "1607003447"
drupal7/modules/blog/blog.info
5 5
core = 7.x
6 6
files[] = blog.test
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/book/book.info
7 7
configure = admin/content/book/settings
8 8
stylesheets[all][] = book.css
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/color/color.info
5 5
core = 7.x
6 6
files[] = color.test
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/comment/comment.info
9 9
configure = admin/content/comment
10 10
stylesheets[all][] = comment.css
11 11

  
12
; Information added by Drupal.org packaging script on 2020-11-18
13
version = "7.74"
12
; Information added by Drupal.org packaging script on 2020-12-03
13
version = "7.77"
14 14
project = "drupal"
15
datestamp = "1605718477"
15
datestamp = "1607003447"
drupal7/modules/contact/contact.info
6 6
files[] = contact.test
7 7
configure = admin/structure/contact
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/contextual/contextual.info
5 5
core = 7.x
6 6
files[] = contextual.test
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/dashboard/dashboard.info
7 7
dependencies[] = block
8 8
configure = admin/dashboard/customize
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/dblog/dblog.info
5 5
core = 7.x
6 6
files[] = dblog.test
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/field/field.info
11 11
required = TRUE
12 12
stylesheets[all][] = theme/field.css
13 13

  
14
; Information added by Drupal.org packaging script on 2020-11-18
15
version = "7.74"
14
; Information added by Drupal.org packaging script on 2020-12-03
15
version = "7.77"
16 16
project = "drupal"
17
datestamp = "1605718477"
17
datestamp = "1607003447"
drupal7/modules/field/modules/field_sql_storage/field_sql_storage.info
7 7
files[] = field_sql_storage.test
8 8
required = TRUE
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/field/modules/field_sql_storage/field_sql_storage.test
313 313
    $field = array('field_name' => 'test_text', 'type' => 'text', 'settings' => array('max_length' => 255));
314 314
    $field = field_create_field($field);
315 315

  
316
    // Attempt to update the field in a way that would break the storage.
316
    // Attempt to update the field in a way that would break the storage. The
317
    // parenthesis suffix is needed because SQLite has *very* relaxed rules for
318
    // data types, so we actually need to provide an invalid SQL syntax in order
319
    // to break it.
320
    // @see https://www.sqlite.org/datatype3.html
317 321
    $prior_field = $field;
318
    $field['settings']['max_length'] = -1;
322
    $field['settings']['max_length'] = '-1)';
319 323
    try {
320 324
      field_update_field($field);
321 325
      $this->fail(t('Update succeeded.'));
drupal7/modules/field/modules/list/list.info
7 7
dependencies[] = options
8 8
files[] = tests/list.test
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/field/modules/list/tests/list_test.info
5 5
version = VERSION
6 6
hidden = TRUE
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/field/modules/number/number.info
6 6
dependencies[] = field
7 7
files[] = number.test
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/field/modules/options/options.info
6 6
dependencies[] = field
7 7
files[] = options.test
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/field/modules/text/text.info
7 7
files[] = text.test
8 8
required = TRUE
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
drupal7/modules/field/tests/field_test.info
6 6
version = VERSION
7 7
hidden = TRUE
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/field_ui/field_ui.info
6 6
dependencies[] = field
7 7
files[] = field_ui.test
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/file/file.info
6 6
dependencies[] = field
7 7
files[] = tests/file.test
8 8

  
9
; Information added by Drupal.org packaging script on 2020-11-18
10
version = "7.74"
9
; Information added by Drupal.org packaging script on 2020-12-03
10
version = "7.77"
11 11
project = "drupal"
12
datestamp = "1605718477"
12
datestamp = "1607003447"
drupal7/modules/file/file.module
281 281
  }
282 282
  // Otherwise just add the new content class on a placeholder.
283 283
  else {
284
    $form['#suffix'] .= '<span class="ajax-new-content"></span>';
284
    $form['#suffix'] = (isset($form['#suffix']) ? $form['#suffix'] : '') . '<span class="ajax-new-content"></span>';
285 285
  }
286 286

  
287
  $form['#prefix'] .= theme('status_messages');
287
  $form['#prefix'] = (isset($form['#prefix']) ? $form['#prefix'] : '') . theme('status_messages');
288

  
288 289
  $output = drupal_render($form);
289 290
  $js = drupal_add_js();
290 291
  $settings = drupal_array_merge_deep_array($js['settings']['data']);
drupal7/modules/file/tests/file_module_test.info
5 5
core = 7.x
6 6
hidden = TRUE
7 7

  
8
; Information added by Drupal.org packaging script on 2020-11-18
9
version = "7.74"
8
; Information added by Drupal.org packaging script on 2020-12-03
9
version = "7.77"
10 10
project = "drupal"
11
datestamp = "1605718477"
11
datestamp = "1607003447"
drupal7/modules/filter/filter.info
7 7
required = TRUE
8 8
configure = admin/config/content/formats
9 9

  
10
; Information added by Drupal.org packaging script on 2020-11-18
11
version = "7.74"
10
; Information added by Drupal.org packaging script on 2020-12-03
11
version = "7.77"
12 12
project = "drupal"
13
datestamp = "1605718477"
13
datestamp = "1607003447"
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff