[BISERVER-15051] hide internal variable when hide internal varibles set to Y

…et to Y

📦 Vulnerable Dependencies
✍ Summary

SEVERITY
CONTEXTUAL ANALYSIS
DIRECT DEPENDENCIES
IMPACTED DEPENDENCY
FIXED VERSIONS
CVES

  Medium
Undetermined
org.apache.activemq:artemis-jms-client-osgi:2.33.0org.pentaho.di.plugins:pentaho-streaming-jms-plugin:<IP_ADDRESS>-SNAPSHOT
io.netty:netty-codec-http 4.1.107.Final
[4.1.108.Final]
CVE-2024-29025

🔬 Research Details
Description:
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. The HttpPostRequestDecoder can be tricked to accumulate data. While the decoder can store items on the disk if configured so, there are no limits to the number of fields the form can have, an attacher can send a chunked post consisting of many small fields that will be accumulated in the bodyListHttpData list. The decoder cumulates bytes in the undecodedChunk buffer until it can decode a field, this field can cumulate data without limits. This vulnerability is fixed in 4.1.108.Final.

🐸 JFrog Frogbot

📦 Vulnerable Dependencies
✍ Summary

SEVERITY
CONTEXTUAL ANALYSIS
DIRECT DEPENDENCIES
IMPACTED DEPENDENCY
FIXED VERSIONS
CVES

Critical
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.60.0.Final]
CVE-2021-41411

    High
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.69.0.Final]
CVE-2022-1415

  Medium
Undetermined
org.apache.activemq:artemis-jms-client-osgi:2.33.0org.pentaho.di.plugins:pentaho-streaming-jms-plugin:<IP_ADDRESS>-SNAPSHOT
io.netty:netty-codec-http 4.1.107.Final
[4.1.108.Final]
CVE-2024-29025

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.1][3.18.2][3.19.2]
CVE-2021-22569

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.15.0]
CVE-2021-22570

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3509

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3171

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3510

 🔬 Research Details

 [ CVE-2021-41411 ] org.drools:drools-core 6.4.0.Final

Description:
Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE), a web authoring and rules management application (Drools Workbench), full runtime support for Decision Model and Notation (DMN) models at Conformance level 3 and an Eclipse IDE plugin for core development.
A KIE project or module is simply a Maven Java project or module; with an additional metadata file META-INF/kmodule.xml. The kmodule.xml file is the descriptor that selects resources to KIE bases and configures those KIE bases and sessions.
The KieModuleMarshaller class is responsible for loading the KIE Module. The module validates the kiemodule.xml file before loading it. However - the validation does not filter out XML external entity (XXE) tags. This can lead to code execution in the Drools server.
This can be exploited by an attacker that is able to add or alter a KIE project/module.

 [ CVE-2022-1415 ] org.drools:drools-core 6.4.0.Final

Description:
A flaw was found where some utility classes in Drools core did not use proper safeguards when deserializing data. This flaw allows an authenticated attacker to construct malicious serialized objects (usually called gadgets) and achieve code execution on the server.

 [ CVE-2024-29025 ] io.netty:netty-codec-http 4.1.107.Final

Description:
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. The HttpPostRequestDecoder can be tricked to accumulate data. While the decoder can store items on the disk if configured so, there are no limits to the number of fields the form can have, an attacher can send a chunked post consisting of many small fields that will be accumulated in the bodyListHttpData list. The decoder cumulates bytes in the undecodedChunk buffer until it can decode a field, this field can cumulate data without limits. This vulnerability is fixed in 4.1.108.Final.

 [ CVE-2021-22569 ] com.google.protobuf:protobuf-java 2.6.0

Description:
An issue in protobuf-java allowed the interleaving of com.google.protobuf.UnknownFieldSet fields in such a way that would be processed out of order.  We recommend upgrading libraries beyond the vulnerable versions.

 [ CVE-2021-22570 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Nullptr dereference when a null char is present in a proto symbol. The symbol is parsed incorrectly, leading to an unchecked call into the proto file's name during generation of the resulting error message. Since the symbol is incorrectly parsed, the file is nullptr. We recommend upgrading to version 3.15.0 or greater.

 [ CVE-2022-3509 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for text data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when parsing a text Protobuf message buffer (using the TextFormat parser), which is uncommon.
Moreover, an attacker must be able to send a crafted Protobuf message to the victim client/server.

 [ CVE-2022-3171 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms.
The issue only occurs when a SubMessage-typed variable (from the example below) is required or optional, but not if it is repeated.
The example is vulnerable even if SubMessage is defined out of the Complex message.
An example of a vulnerable protobuf message:
    message Complex {
        message SubMessage {
          required int32 str = 1;
        }
        required SubMessage required_msg  = 3;
      };

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server

 [ CVE-2022-3510 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when a SubMessage-typed variable (see example below) is optional, but not if it is repeated.
An example of a vulnerable protobuf message:
message SubMessage {
    required int32 str = 1;
  }

message Simple {
    extensions 3 to 199;
};

extend Simple {
  optional SubMessage bar = 3;
}

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server.

🐸 JFrog Frogbot

new File( filename )

at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java (line 58)
🎯 Static Application Security Testing (SAST) Vulnerability

Severity
Finding

  Medium
Stored Path Traversal

 Full description

Overview
Path traversal, also known as directory traversal, is a type of
vulnerability that allows an attacker to access files or directories on a
computer or device that are outside of the intended directory.
Allowing arbitrary read access can allow the attacker to read sensitive
files, such as configuration files or sensitive data, potentially leading
data loss or even system compromise. Allowing arbitrary write access is
more severe and in most cases leads to arbitrary code execution, via
editing important system files or sensitive data.
Vulnerable example
public class path_traversaLvuln {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String DOCS_FOLDER = "/srv/www/docs";
        String docName = statement.executeQuery(query);  // Reading from DB
        Path docPath = Paths.get(DOCS_FOLDER, docName);
        File docFile = docPath.toFile();
        FileUtils.copyFile(docFile, response.getOutputStream());
    }
}

In this example, an attacker can, via a stored parameter, inject a back-path,
that will get anywhere in the system, using "../../".
Remediation
public class path_traversal_safe {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String DOCS_FOLDER = "/srv/www/docs";
        String docName = statement.executeQuery(query);  // Reading from DB
        Path docPath = Paths.get(DOCS_FOLDER, docName);
        + Path normDocPath = docPath.normalize();
        + // Make sure the canonical path resides in the desired dir
        + if (normDocPath.startsWith(DOCS_FOLDER)) {
            File docFile = docPath.toFile();
            FileUtils.copyFile(docFile, response.getOutputStream());
        + }
    }
}

By checking that the folder name still starts with the predefined prefix, we
make sure that the attacker is not able to back-path outside of the allowed
folder.

 Code Flows

 Vulnerable data flow analysis result

↘ System.getProperty( "file.separator" ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ dialog.getFilterPath() + System.getProperty( "file.separator" ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ dialog.getFilterPath() + System.getProperty( "file.separator" ) + dialog.getFileName() (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ filename (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ new SasInputHelper( filename ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 384)
↘ `public class SasInputHelper {
private String filename;
private RowMetaInterface rowMeta;
private SasReader sasReader;
/**

@param filename

     The SAS7BAT filename

*/
public SasInputHelper( final String filename ) throws KettleException {
this.filename = filename;
sasReader = new SasReader( new File( filename ) );

// Determine the row layout of the file ...
//
try {
  rowMeta = new RowMeta();
  sasReader.read( new SasReaderCallback() {
    public void column( int index, String name, String label, SasColumnType type, int length ) {
      int kettleType = ValueMetaInterface.TYPE_NONE;
      int kettleLength;
      switch ( type ) {
        case CHARACTER:
          kettleType = ValueMetaInterface.TYPE_STRING;
          kettleLength = length;
          break;
        case NUMERIC:
          kettleType = ValueMetaInterface.TYPE_NUMBER;
          kettleLength = -1;
          break;
        default:
          throw new RuntimeException( "Unhandled SAS data type encountered: " + type );
      }
      try {
        ValueMetaInterface valueMeta = ValueMetaFactory.createValueMeta( name, kettleType );
        valueMeta.setLength( kettleLength );
        valueMeta.setComments( label );
        rowMeta.addValueMeta( valueMeta );
      } catch ( Exception e ) {
        throw new SasReaderException( "Unable to create new value meta type", e );
      }
    }

    public boolean readData() {
      return false;
    }

    public boolean row( int rowNumber, Object[] rowData ) {
      return true;
    }
  } );
} catch ( Exception e ) {
  throw new KettleException( "Unable to determine the layout of SAS7BAT file '" + filename + "'", e );
}

}
@Override
public String toString() {
return filename;
}
/**

@return the filename
*/
public String getFilename() {
return filename;
}

/**

@return the rowMeta
*/
public RowMetaInterface getRowMeta() {
return rowMeta;
}
}` (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 44)

↘ final String filename (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 55)
↘ new File( filename ) (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 58)

🐸 JFrog Frogbot

🐸 JFrog Frogbot

📦 Vulnerable Dependencies
✍ Summary

SEVERITY
CONTEXTUAL ANALYSIS
DIRECT DEPENDENCIES
IMPACTED DEPENDENCY
FIXED VERSIONS
CVES

Critical
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.60.0.Final]
CVE-2021-41411

    High
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.69.0.Final]
CVE-2022-1415

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.1][3.18.2][3.19.2]
CVE-2021-22569

  Medium
Undetermined
org.apache.activemq:artemis-jms-client-osgi:2.33.0org.pentaho.di.plugins:pentaho-streaming-jms-plugin:<IP_ADDRESS>-SNAPSHOT
io.netty:netty-codec-http 4.1.107.Final
[4.1.108.Final]
CVE-2024-29025

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.15.0]
CVE-2021-22570

    High
Not Applicable
org.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOTorg.drools:knowledge-api:6.4.0.Final
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3171

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3510

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3509

 🔬 Research Details

 [ CVE-2021-41411 ] org.drools:drools-core 6.4.0.Final

Description:
Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE), a web authoring and rules management application (Drools Workbench), full runtime support for Decision Model and Notation (DMN) models at Conformance level 3 and an Eclipse IDE plugin for core development.
A KIE project or module is simply a Maven Java project or module; with an additional metadata file META-INF/kmodule.xml. The kmodule.xml file is the descriptor that selects resources to KIE bases and configures those KIE bases and sessions.
The KieModuleMarshaller class is responsible for loading the KIE Module. The module validates the kiemodule.xml file before loading it. However - the validation does not filter out XML external entity (XXE) tags. This can lead to code execution in the Drools server.
This can be exploited by an attacker that is able to add or alter a KIE project/module.

 [ CVE-2022-1415 ] org.drools:drools-core 6.4.0.Final

Description:
A flaw was found where some utility classes in Drools core did not use proper safeguards when deserializing data. This flaw allows an authenticated attacker to construct malicious serialized objects (usually called gadgets) and achieve code execution on the server.

 [ CVE-2021-22569 ] com.google.protobuf:protobuf-java 2.6.0

Description:
An issue in protobuf-java allowed the interleaving of com.google.protobuf.UnknownFieldSet fields in such a way that would be processed out of order.  We recommend upgrading libraries beyond the vulnerable versions.

 [ CVE-2024-29025 ] io.netty:netty-codec-http 4.1.107.Final

Description:
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. The HttpPostRequestDecoder can be tricked to accumulate data. While the decoder can store items on the disk if configured so, there are no limits to the number of fields the form can have, an attacher can send a chunked post consisting of many small fields that will be accumulated in the bodyListHttpData list. The decoder cumulates bytes in the undecodedChunk buffer until it can decode a field, this field can cumulate data without limits. This vulnerability is fixed in 4.1.108.Final.

 [ CVE-2021-22570 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Nullptr dereference when a null char is present in a proto symbol. The symbol is parsed incorrectly, leading to an unchecked call into the proto file's name during generation of the resulting error message. Since the symbol is incorrectly parsed, the file is nullptr. We recommend upgrading to version 3.15.0 or greater.

 [ CVE-2022-3171 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms.
The issue only occurs when a SubMessage-typed variable (from the example below) is required or optional, but not if it is repeated.
The example is vulnerable even if SubMessage is defined out of the Complex message.
An example of a vulnerable protobuf message:
    message Complex {
        message SubMessage {
          required int32 str = 1;
        }
        required SubMessage required_msg  = 3;
      };

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server

 [ CVE-2022-3510 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when a SubMessage-typed variable (see example below) is optional, but not if it is repeated.
An example of a vulnerable protobuf message:
message SubMessage {
    required int32 str = 1;
  }

message Simple {
    extensions 3 to 199;
};

extend Simple {
  optional SubMessage bar = 3;
}

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server.

 [ CVE-2022-3509 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for text data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when parsing a text Protobuf message buffer (using the TextFormat parser), which is uncommon.
Moreover, an attacker must be able to send a crafted Protobuf message to the victim client/server.

🐸 JFrog Frogbot

:x: Build failed in 3h 21m 11s
Build command:
mvn clean verify -B -e -Daudit -Djs.no.sandbox -pl core,ui

:ok_hand: All tests passed!
Tests run: 1754, Failures: 0, Skipped: 1    Test Results

:information_source:  This is an automatic message

📦 Vulnerable Dependencies
✍ Summary

SEVERITY
CONTEXTUAL ANALYSIS
DIRECT DEPENDENCIES
IMPACTED DEPENDENCY
FIXED VERSIONS
CVES

Critical
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.60.0.Final]
CVE-2021-41411

    High
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.69.0.Final]
CVE-2022-1415

  Medium
Undetermined
org.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOTorg.drools:knowledge-api:6.4.0.Final
com.google.protobuf:protobuf-java 2.6.0
[3.16.1][3.18.2][3.19.2]
CVE-2021-22569

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.15.0]
CVE-2021-22570

  Medium
Undetermined
org.apache.activemq:artemis-jms-client-osgi:2.33.0org.pentaho.di.plugins:pentaho-streaming-jms-plugin:<IP_ADDRESS>-SNAPSHOT
io.netty:netty-codec-http 4.1.107.Final
[4.1.108.Final]
CVE-2024-29025

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3171

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3509

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3510

 🔬 Research Details

 [ CVE-2021-41411 ] org.drools:drools-core 6.4.0.Final

Description:
Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE), a web authoring and rules management application (Drools Workbench), full runtime support for Decision Model and Notation (DMN) models at Conformance level 3 and an Eclipse IDE plugin for core development.
A KIE project or module is simply a Maven Java project or module; with an additional metadata file META-INF/kmodule.xml. The kmodule.xml file is the descriptor that selects resources to KIE bases and configures those KIE bases and sessions.
The KieModuleMarshaller class is responsible for loading the KIE Module. The module validates the kiemodule.xml file before loading it. However - the validation does not filter out XML external entity (XXE) tags. This can lead to code execution in the Drools server.
This can be exploited by an attacker that is able to add or alter a KIE project/module.

 [ CVE-2022-1415 ] org.drools:drools-core 6.4.0.Final

Description:
A flaw was found where some utility classes in Drools core did not use proper safeguards when deserializing data. This flaw allows an authenticated attacker to construct malicious serialized objects (usually called gadgets) and achieve code execution on the server.

 [ CVE-2021-22569 ] com.google.protobuf:protobuf-java 2.6.0

Description:
An issue in protobuf-java allowed the interleaving of com.google.protobuf.UnknownFieldSet fields in such a way that would be processed out of order.  We recommend upgrading libraries beyond the vulnerable versions.

 [ CVE-2021-22570 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Nullptr dereference when a null char is present in a proto symbol. The symbol is parsed incorrectly, leading to an unchecked call into the proto file's name during generation of the resulting error message. Since the symbol is incorrectly parsed, the file is nullptr. We recommend upgrading to version 3.15.0 or greater.

 [ CVE-2024-29025 ] io.netty:netty-codec-http 4.1.107.Final

Description:
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. The HttpPostRequestDecoder can be tricked to accumulate data. While the decoder can store items on the disk if configured so, there are no limits to the number of fields the form can have, an attacher can send a chunked post consisting of many small fields that will be accumulated in the bodyListHttpData list. The decoder cumulates bytes in the undecodedChunk buffer until it can decode a field, this field can cumulate data without limits. This vulnerability is fixed in 4.1.108.Final.

 [ CVE-2022-3171 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms.
The issue only occurs when a SubMessage-typed variable (from the example below) is required or optional, but not if it is repeated.
The example is vulnerable even if SubMessage is defined out of the Complex message.
An example of a vulnerable protobuf message:
    message Complex {
        message SubMessage {
          required int32 str = 1;
        }
        required SubMessage required_msg  = 3;
      };

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server

 [ CVE-2022-3509 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for text data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when parsing a text Protobuf message buffer (using the TextFormat parser), which is uncommon.
Moreover, an attacker must be able to send a crafted Protobuf message to the victim client/server.

 [ CVE-2022-3510 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when a SubMessage-typed variable (see example below) is optional, but not if it is repeated.
An example of a vulnerable protobuf message:
message SubMessage {
    required int32 str = 1;
  }

message Simple {
    extensions 3 to 199;
};

extend Simple {
  optional SubMessage bar = 3;
}

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server.

🐸 JFrog Frogbot

new File( filename )

at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java (line 58)
🎯 Static Application Security Testing (SAST) Vulnerability

Severity
Finding

  Medium
Stored Path Traversal

 Full description

Overview
Path traversal, also known as directory traversal, is a type of
vulnerability that allows an attacker to access files or directories on a
computer or device that are outside of the intended directory.
Allowing arbitrary read access can allow the attacker to read sensitive
files, such as configuration files or sensitive data, potentially leading
data loss or even system compromise. Allowing arbitrary write access is
more severe and in most cases leads to arbitrary code execution, via
editing important system files or sensitive data.
Vulnerable example
public class path_traversaLvuln {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String DOCS_FOLDER = "/srv/www/docs";
        String docName = statement.executeQuery(query);  // Reading from DB
        Path docPath = Paths.get(DOCS_FOLDER, docName);
        File docFile = docPath.toFile();
        FileUtils.copyFile(docFile, response.getOutputStream());
    }
}

In this example, an attacker can, via a stored parameter, inject a back-path,
that will get anywhere in the system, using "../../".
Remediation
public class path_traversal_safe {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String DOCS_FOLDER = "/srv/www/docs";
        String docName = statement.executeQuery(query);  // Reading from DB
        Path docPath = Paths.get(DOCS_FOLDER, docName);
        + Path normDocPath = docPath.normalize();
        + // Make sure the canonical path resides in the desired dir
        + if (normDocPath.startsWith(DOCS_FOLDER)) {
            File docFile = docPath.toFile();
            FileUtils.copyFile(docFile, response.getOutputStream());
        + }
    }
}

By checking that the folder name still starts with the predefined prefix, we
make sure that the attacker is not able to back-path outside of the allowed
folder.

 Code Flows

 Vulnerable data flow analysis result

↘ System.getProperty( "file.separator" ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ dialog.getFilterPath() + System.getProperty( "file.separator" ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ dialog.getFilterPath() + System.getProperty( "file.separator" ) + dialog.getFileName() (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ filename (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 383)
↘ new SasInputHelper( filename ) (at ui/src/main/java/org/pentaho/di/ui/trans/steps/sasinput/SasInputDialog.java line 384)
↘ `public class SasInputHelper {
private String filename;
private RowMetaInterface rowMeta;
private SasReader sasReader;
/**

@param filename

     The SAS7BAT filename

*/
public SasInputHelper( final String filename ) throws KettleException {
this.filename = filename;
sasReader = new SasReader( new File( filename ) );

// Determine the row layout of the file ...
//
try {
  rowMeta = new RowMeta();
  sasReader.read( new SasReaderCallback() {
    public void column( int index, String name, String label, SasColumnType type, int length ) {
      int kettleType = ValueMetaInterface.TYPE_NONE;
      int kettleLength;
      switch ( type ) {
        case CHARACTER:
          kettleType = ValueMetaInterface.TYPE_STRING;
          kettleLength = length;
          break;
        case NUMERIC:
          kettleType = ValueMetaInterface.TYPE_NUMBER;
          kettleLength = -1;
          break;
        default:
          throw new RuntimeException( "Unhandled SAS data type encountered: " + type );
      }
      try {
        ValueMetaInterface valueMeta = ValueMetaFactory.createValueMeta( name, kettleType );
        valueMeta.setLength( kettleLength );
        valueMeta.setComments( label );
        rowMeta.addValueMeta( valueMeta );
      } catch ( Exception e ) {
        throw new SasReaderException( "Unable to create new value meta type", e );
      }
    }

    public boolean readData() {
      return false;
    }

    public boolean row( int rowNumber, Object[] rowData ) {
      return true;
    }
  } );
} catch ( Exception e ) {
  throw new KettleException( "Unable to determine the layout of SAS7BAT file '" + filename + "'", e );
}

}
@Override
public String toString() {
return filename;
}
/**

@return the filename
*/
public String getFilename() {
return filename;
}

/**

@return the rowMeta
*/
public RowMetaInterface getRowMeta() {
return rowMeta;
}
}` (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 44)

↘ final String filename (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 55)
↘ new File( filename ) (at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputHelper.java line 58)

🐸 JFrog Frogbot

🐸 JFrog Frogbot

📦 Vulnerable Dependencies
✍ Summary

SEVERITY
CONTEXTUAL ANALYSIS
DIRECT DEPENDENCIES
IMPACTED DEPENDENCY
FIXED VERSIONS
CVES

Critical
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.60.0.Final]
CVE-2021-41411

    High
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
org.drools:drools-core 6.4.0.Final
[7.69.0.Final]
CVE-2022-1415

  Medium
Undetermined
org.apache.activemq:artemis-jms-client-osgi:2.33.0org.pentaho.di.plugins:pentaho-streaming-jms-plugin:<IP_ADDRESS>-SNAPSHOT
io.netty:netty-codec-http 4.1.107.Final
[4.1.108.Final]
CVE-2024-29025

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.1][3.18.2][3.19.2]
CVE-2021-22569

  Medium
Undetermined
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.15.0]
CVE-2021-22570

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3510

    High
Not Applicable
org.drools:knowledge-api:6.4.0.Finalorg.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOT
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3509

    High
Not Applicable
org.pentaho.di.plugins:kettle-drools5-core:<IP_ADDRESS>-SNAPSHOTorg.drools:knowledge-api:6.4.0.Final
com.google.protobuf:protobuf-java 2.6.0
[3.16.3][3.19.6][3.20.3][3.21.7]
CVE-2022-3171

 🔬 Research Details

 [ CVE-2021-41411 ] org.drools:drools-core 6.4.0.Final

Description:
Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE), a web authoring and rules management application (Drools Workbench), full runtime support for Decision Model and Notation (DMN) models at Conformance level 3 and an Eclipse IDE plugin for core development.
A KIE project or module is simply a Maven Java project or module; with an additional metadata file META-INF/kmodule.xml. The kmodule.xml file is the descriptor that selects resources to KIE bases and configures those KIE bases and sessions.
The KieModuleMarshaller class is responsible for loading the KIE Module. The module validates the kiemodule.xml file before loading it. However - the validation does not filter out XML external entity (XXE) tags. This can lead to code execution in the Drools server.
This can be exploited by an attacker that is able to add or alter a KIE project/module.

 [ CVE-2022-1415 ] org.drools:drools-core 6.4.0.Final

Description:
A flaw was found where some utility classes in Drools core did not use proper safeguards when deserializing data. This flaw allows an authenticated attacker to construct malicious serialized objects (usually called gadgets) and achieve code execution on the server.

 [ CVE-2024-29025 ] io.netty:netty-codec-http 4.1.107.Final

Description:
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. The HttpPostRequestDecoder can be tricked to accumulate data. While the decoder can store items on the disk if configured so, there are no limits to the number of fields the form can have, an attacher can send a chunked post consisting of many small fields that will be accumulated in the bodyListHttpData list. The decoder cumulates bytes in the undecodedChunk buffer until it can decode a field, this field can cumulate data without limits. This vulnerability is fixed in 4.1.108.Final.

 [ CVE-2021-22569 ] com.google.protobuf:protobuf-java 2.6.0

Description:
An issue in protobuf-java allowed the interleaving of com.google.protobuf.UnknownFieldSet fields in such a way that would be processed out of order.  We recommend upgrading libraries beyond the vulnerable versions.

 [ CVE-2021-22570 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Nullptr dereference when a null char is present in a proto symbol. The symbol is parsed incorrectly, leading to an unchecked call into the proto file's name during generation of the resulting error message. Since the symbol is incorrectly parsed, the file is nullptr. We recommend upgrading to version 3.15.0 or greater.

 [ CVE-2022-3510 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when a SubMessage-typed variable (see example below) is optional, but not if it is repeated.
An example of a vulnerable protobuf message:
message SubMessage {
    required int32 str = 1;
  }

message Simple {
    extensions 3 to 199;
};

extend Simple {
  optional SubMessage bar = 3;
}

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server.

 [ CVE-2022-3509 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for text data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms, which may exhaust the CPU.
The issue only occurs when parsing a text Protobuf message buffer (using the TextFormat parser), which is uncommon.
Moreover, an attacker must be able to send a crafted Protobuf message to the victim client/server.

 [ CVE-2022-3171 ] com.google.protobuf:protobuf-java 2.6.0

Description:
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers is encoding and decoding the protocol buffer's own format called the wire format.
It was discovered that due to a design problem in the parsing procedure for binary data, a denial of service can occur, due to unknown fields causing objects to be converted constantly between mutable and immutable forms.
The issue only occurs when a SubMessage-typed variable (from the example below) is required or optional, but not if it is repeated.
The example is vulnerable even if SubMessage is defined out of the Complex message.
An example of a vulnerable protobuf message:
    message Complex {
        message SubMessage {
          required int32 str = 1;
        }
        required SubMessage required_msg  = 3;
      };

The attacker must be able to send a protobuf message with the SubMessage-typed variable to the victim client/server

🐸 JFrog Frogbot

:x: Build failed in 3h 20m 55s
Build command:
mvn clean verify -B -e -Daudit -Djs.no.sandbox -pl core,ui

:ok_hand: All tests passed!
Tests run: 1754, Failures: 0, Skipped: 1    Test Results

:information_source:  This is an automatic message


(On Ubuntu 12.04) Start Docker only after cgconfig started

On Ubuntu 12.04 without this change, the docker service starts before cgconfig, and I get the following error whenever starting a Docker container:
[error] container.go:815 Error running container: cgroup mountpoint not found for cpu

The only modification from the default cgconfig upstart script is that
start on runlevel [2345]

has been changed to
start on (runlevel [2345] and starting docker)

Overall, this change doesn't feel quite clean, so I'm happy to edit is as you suggest.

Hello!
With the refactor, cgroup management is now out of scope for the Docker cookbook. Closing


chore: snapshot test

Oops, I should have put 1c4d70d and 82bcd09 on the other PR...

Most of this was, conceptually, merged as #91; although it was heavily rewritten and not super commit compatible.


Diameter packet description on SVG

When parameters -simple_diagrams is set we don't see informatical diameter packet description:

It will be better to extend diameter packet description.
For example:

The easiest way would be to improve the packet_to_str() function to write a better one-liner summarizing the protocol for Diameter messages.
On the first pass, it just write the protocol name, but as you can see for the simple PFCP case, it is possible to convert such a line to PFCP req. or PFCP rsp. based on the packet contents. Something similar could be done for protocol Diameter,
There is a small snippet already processing Diameter, it currently only changes the color of the Diameter messages to yellow. But it could be extended to contain a small summary of the message as you show in your picture.
NGAP/NAS messages needed such an "additional couple of lines" because I needed to include for better clarity the binary (hex) content of the message because some people wanted to compare the binary content compared to the spec IEs.
When activating simple_diagrams, the packet content gets removed and only the protocol content is shown. In the normal case, both are shown. I anyway, I think that your proposed text is better readable than the original one.
Feel free to to a merge request if you want/find time to :)

Feature added in b69e4e6a3a0305ee86fe3b8c4c69a3c17deeda48


[Chore] Update MinerInfo

Summary of changes
Changes introduced in this pull request:

Update MinerInfo to conform to Lotus v0 rpc.

Reference issue to close (if applicable)

work on https://github.com/ChainSafe/forest/issues/3639
Other information and links

Codecov Report
Attention: 66 lines in your changes are missing coverage. Please review.

Comparison is base (ad51ab3) 12.86% compared to head (95bd07a) 12.84%.

Files
Patch %
Lines

fil_actor_interface/src/builtin/miner/mod.rs
0.00%
56 Missing :warning:

fil_actor_interface/src/convert.rs
0.00%
10 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #210      +/-   ##
==========================================
- Coverage   12.86%   12.84%   -0.03%
==========================================
  Files         366      366
  Lines       37164    37230      +66
==========================================
  Hits         4783     4783
- Misses      32381    32447      +66

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Update stable version in repo from 1.0.11 to 1.0.12

Think about update stable version to 1.0.12
Version: stable=1.0.11 (64 days old) => latest=1.0.12 (15 days old)
Installs: stable=100 (41.49%), latest=49 (20.33%), total=241
Click to edit

not valid


Cannot Delete Rows

On some tables, it's impossible to delete rows, which cripples the admin.
This originally cropped up with a MySQL database and a whole lot more related tables, but I reduced it to a simple gist with sqlite and the issue is the same.
Head to the Subscription Tab and try to delete Joe's subscription to time: this error message pops up.

Outside of flask-admin, I can delete the row without complaints from the two databases I've tried this with (sqlite, MySQL).

It says NOT NULL constraint failed. If you remove nullable=False here then it will work:  https://gist.github.com/boolbag/9de8f3af7f31ce556791#file-cant_delete-py-L65
You can also reproduce the error by deleting the a record like this: https://gist.github.com/pawl/e995f091dafeb7b59ca6#file-cant_delete-py-L110

@pawl Thanks for your message, but I don't see why I should have to remove nullable=False, which is a valid requirement for a database field. When you set a NOT NULL field in a database, it means that the field must have a value (an empty string is an acceptable value), as opposed to NULL.
This has nothing to do with deleting rows, and in fact you can issue SQL to delete these rows. The database has no problem with the regular DELETE SQL, it only has problems with whatever crazy SQL is issued when you click the delete icon.
This is a bug, I don't think it should be closed.

@pawl Expanding on this point, if you add these two lines after the last commit of my gist:
    db.session.execute("DELETE from subscription WHERE subid = 1")
    db.session.commit()

You will see that the database is happy to delete Joe's subscription to TIme.
It's the delete button that doesn't work.
Please reopen the issue.

This same thing will happen even without Flask-Admin. Try this example: https://gist.github.com/pawl/14e6ca2dcdf0435925af
That example is just doing db.session.delete(model) and committing just like the delete button in Flask-Admin does: https://github.com/flask-admin/flask-admin/blob/master/flask_admin/contrib/sqla/view.py#L1037
It's not a Flask-Admin problem. It probably has something to do with how SQLAlchemy implements ondelete="CASCADE"

@pawl
Thank you very much for digging up and explaining the source of the problem! So it's SQLA then... Maybe one of the reasons some say ORMs are an antipattern. :)
Although I'm at home in Python, flask-admin is new to me, as is SQLA (so used to working directly with the database). I'm excited to learn flask-admin because writing interfaces gets really tiring.
If I can ask what you may see as a rather trivial question, do you happen to know how I can get the row's table name (__tablename__) in an extended list.html template? For instance, I see that I can get the row number using get_pk_value(row). If I knew how to access the table name, I could start adding buttons to build new functionality --- perhaps starting with a different delete button. Thank you in advance for any insights you have time to share.

@pawl
Finally got it working. Deleting rows is a really important function, so thought I'd post a gist showing the solution.

The solution is explained on this SO post.
Instead of defining the relationship inside the child class, you define it inside the parent class, specifying cascade="all,delete"
The relevant line is line 55: subscriptionschedule = relationship("SubscriptionSchedule", cascade="all,delete", backref="subscription")


How to autostart this plugin ?

It doesn't appear to autostart by itself so I added a vim.cmd("Alpha") which makes it start on nvim launching, but then it generates this weird empty file that makes the editor close

But if I remove the vim cmd and call :Alpha after nvim launches, then this file doesn't appear

Sorry wrong repo >.<
Idk whether you can delete please do


Update strike.is-cool.me.json

Requirements

[x] You have completed your website.
[x] The website is reachable.
[x] The CNAME record doesn't contain https:// or /.
[x] There is sufficient information at the owner field.

Description
For birthday>
Link to Website
https://deathofme.vercel.app/

I have read the CLA Document and I hereby sign the CLA


[feedback] language selections component in two places

In home page, the website has language selection twice.
It would be more efficient to have the language selection only once on the navigation bar, instead of having it both on the navigation bar and footer.

Hi,  @soham2k06!   Generally users expect the language selector to be in a consistent location, usually the navigation bar. Placing it in two different places is inconsistent and makes it harder for users to find. Having the language selector only on the navigation bar keeps the footer uncluttered and focused on other important information or actions.
Thank you!


Fix issue with stopping batcher gracefully

Required for all non-trivial PRs

[ ] Rebased/mergable
[ ] Tests pass
[ ] CHANGELOG.md updated
[ ] Sign CLA (if not already signed)

Required only if applicable
You can erase any checkboxes below this note if they are not applicable to your Pull Request.

[ ] InfluxQL Spec updated

This fixes the issue where Stop in batcher does not gracefully stop
the batcher go routine.

Closing as this is not necessary.


Update actions to trigger Klutch actions on docs changes

WARNING: Only users listed in the CODEOWNERS file can approve PRs!

Abandoned.
A different approach will be pursued without using dispatches.


Deal with reciprocal space PME

Right now, we don't capture the reciprocal space in the CustomNonbondedForce. We have a couple workarounds:

CustomCVForce interpolating between NonbondedForces for electrostatics of each endpoint, as well as a NonbondedForce for environment interactions.

Pros: somewhat simple to implement
Cons: very large number of exceptions (is this a problem?). Either we have to exclude all the environment-environment atoms in the endpoint NonbondedForces, or we have to use exceptions to include all the environment-core and core-core interactions.

CustomCVForce interpolating between two NonbondedForces for electrostatics, including the environment interactions.

Pros: fewer exceptions (I think)
Cons: It turns out to require a pretty substantial change to the way the HybridTopology is set up.

Thoughts? @jchodera @brycestx

What do you mean by "environment interactions" here? Lennard-Jones interactions, or electrostatics? And do you just mean "all interactions that don't involve the alchemical region"?
If electrostatics, remember that PME must include all the electrostatics so that a uniform background charge is not used. I'm not certain that splitting out environment electrostatics (if the environment carries a net charge) would have an effect that exactly cancels with the alchemical region interactions with the opposite net charge.

Oh, sorry, looks like I didn't post this response:
Sorry, by environment interactions I mean "all interactions that don't involve the alchemical region." That's what I named it in the code + docs. And I was only referring to electrostatics.

If electrostatics, remember that PME must include all the electrostatics so that a uniform background charge is not used. I'm not certain that splitting out environment electrostatics (if the environment carries a net charge) would have an effect that exactly cancels with the alchemical region interactions with the opposite net charge.

So you're saying I can't have 3 NonbondedForce objects, one for alchemical system A, another for alchemical system B, and a third for environment (defined above).
Instead, the only way to address this is to have two NonbondedForce objects with electrostatics only for everything + sterics for the environment (again as defined above), with alchemical sterics handled by a now-lone CustomNonbondedForce?

So you're saying I can't have 3 NonbondedForce objects, one for alchemical system A, another for alchemical system B, and a third for environment (defined above).
Instead, the only way to address this is to have two NonbondedForce objects with electrostatics only for everything + sterics for the environment (again as defined above), with alchemical sterics handled by a now-lone CustomNonbondedForce?

Yes. You can't split up PME this way because it is not pairwise.

Ok, thanks.

Instead, the only way to address this is to have two NonbondedForce objects with electrostatics only for everything + sterics for the environment (again as defined above)

To be pedantic, the two PME NonbondedForce objects representing states A and B would only be fed to a CustomCVForce, not added to the System.

I have tried running a system from mcl1 with the exact-pme-relative #469 branch and I get nan's in the minimization/equilibration stage. This is using the latest dev build of openmm 7.3.2. Attached are the nan-error-logs including the serialized integrators, states and systems from both the complex and solvent stages. Lambda was set to 0.0. I am currently debugging and will update with anything I find.
mcl1_26~44_nan_error_logs.tar.gz

I'm not sure this branch has even been tested yet, so I'd hold off until @pgrinaway finishes and tests the implementation.

Please do test the 7.3.2 OpenMM build for benchmarking, though! It's built for CUDA 9.2.

This was resolved by #472 #477 and friends.


Permanent put controller reinitializes when using offAll()

I have a big problem since the latest update 2.11.1 and I'm on Flutter 1.17.2. My permanent controller keep initializing over and over agian. All the code is the same except that I put permanent to true.
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final String id = await DeviceInfoService().fetchId();
  final PreferencesController preferencesController = await PreferencesController.initializeAsync();

  Get.put<DeviceInfoModel>(DeviceInfoModel(id, Platform.operatingSystem));
  Get.put<PreferencesController>(preferencesController);
  Future<void>.delayed(Duration(seconds: 2)).then((value) => onSplashDalayDone());
  Get.put<OverlayController>(OverlayController());

  runApp(App());
}

void onSplashDalayDone() {
  print('on splash done');
  Get.put<ConnectionController>(
    ConnectionController(
      onConnected: (result) {
        if (Get.find<AuthenticationController>().state == AuthenticationState.authenticated)
          Get.offAllNamed('/home');
        else
          Get.offAllNamed('/signUp');
      },
      onDisconnected: () {
        Get.offAll(TheDisconnectedView());
      },
    ),
    permanent: true
  );
  Get.put<AuthenticationController>(
    FirebaseAuthenticationController(onAuthenticated: (state) {
      Get.offAllNamed('/home');
    }, onUnauthenticated: (state) {
      Get.offAllNamed('/signUp');
    }),
    permanent: true
  );
}

which logs the following,
I/flutter (20527): [GOING TO ROUTE] /
I/flutter (20527): on splash done
I/flutter (20527): [GET] ConnectionController has been initialized
I/flutter (20527): init auth
I/flutter (20527): [GET] AuthenticationController has been initialized
I/flutter (20527): [GOING TO ROUTE] /home
I/flutter (20527): [REMOVING ROUTE] /
I/flutter (20527): [GET] [ConnectionController] has been marked as permanent, SmartManagement is not authorized to delete it.
I/flutter (20527): [GET] [AuthenticationController] has been marked as permanent, SmartManagement is not authorized to delete it.
I/flutter (20527): init auth
I/flutter (20527): [GET] AuthenticationController has been initialized
I/flutter (20527): [GOING TO ROUTE] /home
I/flutter (20527): [REMOVING ROUTE] /home
I/flutter (20527): [GET] [AuthenticationController] has been marked as permanent, SmartManagement is not authorized to delete it.
I/flutter (20527): [GET] DatabaseService instance was created at that time
I/flutter (20527): [GET] GetStreamController<List<GroupInvitationModel>> has been initialized
I/flutter (20527): init auth
I/flutter (20527): [GET] AuthenticationController has been initialized
I/flutter (20527): [GOING TO ROUTE] /home
I/flutter (20527): [REMOVING ROUTE] /home
I/flutter (20527): [GET] DatabaseService deleted from memory
I/flutter (20527): [GET] [AuthenticationController] has been marked as permanent, SmartManagement is not authorized to delete it.
I/flutter (20527): [GET] onClose of GetStreamController<List<GroupInvitationModel>> called
I/flutter (20527): [GET] GetStreamController<List<GroupInvitationModel>> deleted from memory
I/flutter (20527): [GET] DatabaseService instance was created at that time
I/flutter (20527): [GET] GetStreamController<List<GroupInvitationModel>> has been initialized
I/flutter (20527): [GET] onClose of GetStreamController<List<GroupInvitationModel>> called
I/flutter (20527): [GET] GetStreamController<List<GroupInvitationModel>> deleted from memory
I/flutter (20527): init auth
I/flutter (20527): [GET] AuthenticationController has been initialized
I/flutter (20527): [GOING TO ROUTE] /home
I/flutter (20527): [REMOVING ROUTE] /home
I/flutter (20527): [GET] DatabaseService deleted from memory
I/flutter (20527): Instance GetStreamController<List<GroupInvitationModel>> not found

So I/flutter (20527): [GET] AuthenticationController has been initialized keeps being called so my Authentication Controller onInit() appears to be called everytime ofAll() is called.
So this creates a infinite loop since the onAuthenticted which has the offAll() is called in the onInit() of the AuthenticationController! So on every offAll() the put controller reinitializes and calls the offAll() again which leads to my page infinitly switching.
The strange thing is my ConnectionController which is also permanent is not being reinitialized. I'm not calling either of these controllers anywhere else in my project.
Side note: I noticed that you've added the put Async, but it doesn't have a permanent option, is that intentional?

Hey is this a problem on my end? If not is there any time indication when this might be fixed? So I can plan accordingly

@jonataslaw is it a problem on my end? If not is there any time indication on when this might be fixed? So I can plan accordingly :). Sorry if I hope I don't come accross as impatient.

@jonataslaw is it a problem on my end? If not is there any time indication on when this might be fixed? So I can plan accordingly :). Sorry I hope I don't come accross as impatient.

Since this issue was opened, I am trying to create a reproduction code to investigate it, but I cannot reproduce it.
I will try again now.

I updated my flutter version and the problem is gone. Stange, but it works now.

Glad it worked, I didn't know what else to try to reproduce this problem hahaha

You are not going to like this but the problem is still there, but I have managed to reproduce the problem. I worked late into the night to try and reproduce it. Run this code an you'll see that the controller reinitializes everytime you go back from somePage to the home page.
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Future<void>.delayed(Duration(seconds: 2)).then((value) => putController());
  runApp(App());
}

void putController()
{
  Get.put<BaseAuthController>(SpecificAuthController(), permanent: true);
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialRoute: '/',
      namedRoutes: {
        '/': GetRoute(page: Splash()),
        '/home': GetRoute(page: Home(), binding: SomeBinding()),
        '/somepage': GetRoute(page: SomePage(), binding: SomeBinding()),
      },
    );
  }
}

class Splash extends StatelessWidget {
  Splash() {
    print('splash widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return Text('splash');
  }
}

class Home extends StatelessWidget {
  Home() {
    print('home widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(child: Text('go to some page'), onPressed: () => Get.toNamed('/somepage'));
  }
}

class SomePage extends StatelessWidget {
  SomePage() {
    print('some page widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(child: Text('back to home'), onPressed: () => Get.back());
  }
}

class SomeBinding extends Bindings {
  @override
  void dependencies() {
    final BaseAuthController authController = Get.find<BaseAuthController>();
    Get.lazyPut<SomeService>(() => SomeService(authController.user));
  }
}

class BaseAuthController extends GetController {
  String user = 'the user';
}

class SpecificAuthController extends BaseAuthController {

  @override
  void onInit() {
    super.onInit();
    print('controller inits');
    Get.offAllNamed('/home');
  }
}

class SomeService
{
  String neededUserReference;
  String someText = 'go to page';

  SomeService(this.neededUserReference);
}

The problem started occuring after calling to offAll() from my controller
  void onInit() {
    super.onInit();
    print('controller inits');
    Get.offAllNamed('/home');
  }

I hope you find a fix soon. I've been struggeling for days with this now and I have a important dealine coming up this friday.

Btw I removed final BaseAuthController authController = Get.find<BaseAuthController>(); because what I think is happening is that the widgets are made on startup so it tried to find the depency which is not there yet. So I would have to do something like Get.lazyPut(() => SomeService(() => Get.find().user)); which is basically moving the builder that could be on the route to this spot I think.
Try running this code without a builder. It will infinitely go from page to page.
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Future<void>.delayed(Duration(seconds: 2)).then((value) => Get.put<BaseAuthController>(SpecificAuthController(), permanent: true));
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialRoute: '/',
      namedRoutes: {
        '/': GetRoute(page: Splash()),
        '/home': GetRoute(page: Home(), binding: SomeBinding()),
        '/somepage': GetRoute(page: SomePage()),
      },
    );
  }
}

class Splash extends StatelessWidget {
  Splash() {
    print('splash widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return Text('splash');
  }
}

class Home extends StatelessWidget {
  Home() {
    print('home widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(child: Text('go to some page'), onPressed: () => Get.toNamed('/somepage'));
  }
}

class SomePage extends StatelessWidget {
  SomePage() {
    print('some page widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(child: Text('back to home'), onPressed: () => Get.back());
  }
}

class SomeBinding extends Bindings {
  @override
  void dependencies() {
    Get.lazyPut<SomeService>(() => SomeService(Get.find<BaseAuthController>().user));
  }
}

class BaseAuthController extends GetController {
  String user = 'the user';
}

class SpecificAuthController extends BaseAuthController {

  @override
  void onReady() {
    // TODO: implement onReady
    super.onReady();
    print('controller is ready');
    Get.offAllNamed('/home');
  }
}

class SomeService
{
  String neededUserReference;
  String someText = 'some service found';

  SomeService(this.neededUserReference);
}

onReady is only called if onInit was initialized during the start of a page.
Why do you use this Future.delayed?
Is there any reason why you shouldn't use initialBinding and insert this controller in the main?
It would be so much easier (and bug-free) for you to do this:
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialRoute: '/',
      initialBinding: InitialBinding(),
      namedRoutes: {
        '/': GetRoute(page: Splash()),
        '/home': GetRoute(page: Home(), binding: SomeBinding()),
        '/somepage': GetRoute(page: SomePage()),
      },
    );
  }
}

class Splash extends StatelessWidget {
  Splash() {
    print('splash widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Center(child: Text('splash')));
  }
}

class Home extends StatelessWidget {
  Home() {
    print('home widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(
        child: Text('go to some page'),
        onPressed: () => Get.toNamed('/somepage'));
  }
}

class SomePage extends StatelessWidget {
  SomePage() {
    print('some page widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(
        child: Text('back to home'), onPressed: () => Get.back());
  }
}

class SomeBinding extends Bindings {
  @override
  void dependencies() {
    final BaseAuthController authController = Get.find<BaseAuthController>();
    Get.lazyPut<SomeService>(() => SomeService(authController.user));
  }
}

class BaseAuthController extends GetController {
  String user = 'the user';
}

class InitialBinding implements Bindings {
  @override
  void dependencies() {
    Get.put<BaseAuthController>(SpecificAuthController(), permanent: true);
  }
}

class SpecificAuthController extends BaseAuthController {
  @override
  void onReady() {
    print('controller is ready');
    Get.offAllNamed('/home');
  }
}

class SomeService {
  String neededUserReference;
  String someText = 'some service found';
  SomeService(this.neededUserReference);
}

Yes but the thing is I only want the AuthenticationController in the picture after 2 seconds. Because it will go to page page. So I don't put the controller at a later time the splash page will be disposed of immediately.

Yes but the thing is I only want the AuthenticationController in the picture after 2 seconds. Because it will route to a page. So I don't put the controller directly because the splash page will be disposed of immediately instead of showing for a certain duration, since the authentication controller will go to a route immediately .

In the example I gave it takes about 500 milliseconds to go to another page because of onReady

Where does the 500 milisecond delay come from? Sorry I don't see it.

Where does the 500 milisecond delay come from? Sorry I don't see it.
Also I would like to have control over the duration.

500 milliseconds is the screen rendering time, you can use the delay in onReady:
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialRoute: '/',
      initialBinding: InitialBinding(),
      namedRoutes: {
        '/': GetRoute(page: Splash()),
        '/home': GetRoute(page: Home(), binding: SomeBinding()),
        '/somepage': GetRoute(page: SomePage()),
      },
    );
  }
}

class Splash extends StatelessWidget {
  Splash() {
    print('splash widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Center(child: Text('splash')));
  }
}

class Home extends StatelessWidget {
  Home() {
    print('home widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(
        child: Text('go to some page'),
        onPressed: () => Get.toNamed('/somepage'));
  }
}

class SomePage extends StatelessWidget {
  SomePage() {
    print('some page widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(
        child: Text('back to home'), onPressed: () => Get.back());
  }
}

class SomeBinding extends Bindings {
  @override
  void dependencies() {
    final BaseAuthController authController = Get.find<BaseAuthController>();
    Get.lazyPut<SomeService>(() => SomeService(authController.user));
  }
}

class BaseAuthController extends GetController {
  String user = 'the user';
}

class InitialBinding implements Bindings {
  @override
  void dependencies() {
    Get.put<BaseAuthController>(SpecificAuthController(), permanent: true);
  }
}

class SpecificAuthController extends BaseAuthController {
  @override
  onReady() async {
    await Future.delayed(Duration(seconds: 2));
    print('controller is ready');
    Get.offAllNamed('/home');
  }

  /// I'TS WORKS TOO
  // @override
  // onInit() async {
  //   await Future.delayed(Duration(seconds: 2));
  //   print('controller is ready');
  //   Get.offAllNamed('/home');
  // }
}

class SomeService {
  String neededUserReference;
  String someText = 'some service found';
  SomeService(this.neededUserReference);
}

It just seems wierd to me, since now I am specifying the splash screen duration in my authentication controller. Doesn't that seem wierd to you?
I will try this first thing tommorow cause I'm really tired. I think this will work but it just feels wierd to me I gues.

The other thing that is wierd to me is that the AuthenticationController will exist when it is not yet needed. But since this controller will never be called by Get.find() lazy putting doesn't make any sense.

see 2 possible solutions. 1 I make a splash controller which put's the authentication controller after a delay.

I go back to the future builder in the splash page and just put the controller in the future builder's builder. But is it wierd to put a controller in a builder?

Which one would you go with?

Even with this it still happens the onReady is only fired when I rotate the screen. So it's onInit is never called right? Why?
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialBinding: InitialBinding(),
      initialRoute: '/',
      namedRoutes: {
        '/': GetRoute(page: Splash()),
        '/home': GetRoute(page: Home()),
        '/somepage': GetRoute(page: SomePage()),
      },
    );
  }
}

class Splash extends StatelessWidget {
  Splash() {
    print('splash widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return Text('splash');
  }
}

class Home extends StatelessWidget {
  Home() {
    print('home widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    return RaisedButton(child: Text('go to some page'), onPressed: () => Get.toNamed('/somepage'));
  }
}

class SomePage extends StatelessWidget {
  SomePage() {
    print('some page widget instantiate');
  }

  @override
  Widget build(BuildContext context) {
    final service = Get.find<SomeService>();
    print(service.someText);
    return RaisedButton(child: Text('back to home'), onPressed: () => Get.back());
  }
}

class InitialBinding extends Bindings {
  @override
  void dependencies() {
    Get.put<SplashController>(SplashController());
  }
}

class SplashController extends GetController
{
  @override
  void onReady() async{
    // TODO: implement onInit
    super.onReady();
    await Future<void>.delayed(Duration(seconds: 2));
    Get.put<BaseAuthController>(SpecificAuthController(), permanent: true);
  }
}

class BaseAuthController extends GetController {
  String user = 'the user';
}

class SpecificAuthController extends BaseAuthController {

  @override
  void onReady() async{
    super.onReady();
    print('controller is ready');
    Get.offAllNamed('/home');
  }
}

When I add a simple binding everything goes to hell again, it goes into infinite loop
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialBinding: InitialBinding(),
initialRoute: '/',
namedRoutes: {
'/': GetRoute(page: Splash()),
'/home': GetRoute(page: Home(), binding: SomeBinding()),
'/somepage': GetRoute(page: SomePage()),
},
);
}
}
class Splash extends StatelessWidget {
Splash() {
print('splash widget instantiate');
}
@override
Widget build(BuildContext context) {
return Text('splash');
}
}
class Home extends StatelessWidget {
Home() {
print('home widget instantiate');
}
@override
Widget build(BuildContext context) {
final service = Get.find();
print(service.someText);
return RaisedButton(child: Text('go to some page'), onPressed: () => Get.toNamed('/somepage'));
}
}
class SomePage extends StatelessWidget {
SomePage() {
print('some page widget instantiate');
}
@override
Widget build(BuildContext context) {
final service = Get.find();
print(service.someText);
return RaisedButton(child: Text('back to home'), onPressed: () => Get.back());
}
}
class InitialBinding extends Bindings {
@override
void dependencies() {
Get.put(SplashController());
}
}
class SomeBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => SomeService(Get.find().user));
}
}
class SplashController extends GetController
{
@override
void onReady() async{
// TODO: implement onInit
super.onReady();
await Future.delayed(Duration(seconds: 2));
Get.put(SpecificAuthController(), permanent: true);
}
}
class BaseAuthController extends GetController {
String user = 'the user';
}
class SpecificAuthController extends BaseAuthController {
@override
void onReady() async{
// TODO: implement onReady
super.onReady();
print('controller is ready');
Get.offAllNamed('/home');
}
}
class SomeService
{
String neededUserReference;
String someText = 'some service found';
SomeService(this.neededUserReference);
}
I noticed that when I remove
final service = Get.find<SomeService>();
print(service.someText);

The looping stops but it always goes to the last page.


Starting draft of parts list.

Close #118

This issue is blocked on #168, as the parts.yaml will have to reference the component names


Add Scratch modal

This PR adds a new modal that let users pick the geometry of their maps.

It appears every time the user enters in an empty map, but if the user clicks on 'skip', the dialog won't appear again.
When the user clicks on an option, the dialog get's closed and the interface to add the geometry apears:

/cc @viddo & @xavijam & @saleiva

Frontend tests were OK :+1: (details)

Awesome, :+1:

Frontend tests were OK :+1: (details)


[YUNIKORN-790] Implement MaxApplications enforcement

What is this PR for?
Add the variable for running application and max running application, and make sure that running application will not more than  max running application.
What type of PR is it?

[ ] - Bug Fix
[x] - Improvement
[ ] - Feature
[ ] - Documentation
[ ] - Hot Fix
[ ] - Refactoring

Todos

[ ] - Task

What is the Jira issue?
https://issues.apache.org/jira/browse/YUNIKORN-790
How should this be tested?
Screenshots (if appropriate)
Questions:

[ ] - The licenses files need update.
[ ] - There is breaking changes for older versions.
[ ] - It needs documentation.

You accidentally committed an empty file yunikorn_state.txt. That should be removed from the PR.

please rebase so we can move this forward.

Superseded by #429


Functions not bindable

Currently using ionic1-star-rating in a ionic1 javascript project and I cannot seem to get any of my custom functions to work with the component.
By custom functions, I mean functions passed to any of the following properties;
getColor / getHalfStarVisible / onClick / onRatingChange / onHover
Closing this as I discovered a hole in my testsuite.

Hi. Nice that you were able to solve it.
The custom functions should be tested in angular 1-star-rating which this lib extends from.
If I could improve the docs just give me the right hint.


Version number mismatch...

The package.json file says the version is 1.8.7
The bower.json file says the version is 1.8.4
The lib/sticky.js file says the version as 1.8.6

Which one is correct?  I assume the highest version number, but this really creates a lot of confusion! :confused:

@chrismbarr I have seen similar issues and ended up forking and fixing the issues on my own since @d-oliveros  has not done much with the repo in the last 4/5 months. Someone already as a PR#125  to address this issue. So there is no need for this issue if the PR is merged.
Unfortunately I have not kept up my branch either. It would be great if others were contributors / owners so that it could be maintained and updated.

ok, good to know thanks! I'll close this.


Add Chad

Coverage remained the same at 96.522% when pulling f842d66458c2a973d140f52fe17a6bff2f0a81aa on addChad into 9c753746beb649fec453b9b487687d969526b231 on main.


ADR: TLS for additional services

LGTM 1 question though... what if we will have a customer that will want TLS for Redis and accepts the performance impact and is bypassing that with bigger nodes for Redis, should we then enable TLS for that customer only, or refuse to enable it?

The Redis operator we use does not support TLS and there seems to be little interest in adding it. So ... that kind of closes the discussion. :smile: I added some text to clarify our position.


Build kubicorn from source (issue #77)

Please add additional instruction to build kubicorn from source #77

@arashkaffamanesh can you please resolve the merge conflict?

I couldn't resolve the merge conflict and closed the PR accidentally, I'll reopen it and try again.

You should be able to click resolve conflicts and do it directly in Github

The resolve conflicts button is greyed out with the hint that "these conflicts are too complex to resolve in the web editor" :-(

Hrmm you can resolve from the command line? Or maybe just start a new PR based on a fresh copy of master?

@arashkaffamanesh any update on this?

@arashkaffamanesh One way to resolve merging conflict is to get a up-to-date version of kubicorn and rebase your changes on top of it.

Closing this PR as it's stale. Please re open if necessary! 😃


Class 'Symphony' not found

I keep getting this error:
Fatal error:  Class 'Symphony' not found in /Users/jdsimcoe/Sites/atheycreek/symphony/lib/boot/bundle.php on line 18, referer: http://atheycreek.dev/

Not sure what is driving it.

Is this with 2.6.0.rc-1 or with 2.5.3? If it's the former, can you check if you have an autoload.php file and your index.php matches?

It's with 2.6.0.rc-1. I do have an autoload.php file and the index.php file matches.

And running PHP 5.3+ I assume? When does this error occur? Just accessing your homepage?

Yeah PHP 5.5+. But I’m not seeing the error anymore.
--
simko.io
On Mon, Mar 2, 2015 at 5:08 PM, Brendan Abbott<EMAIL_ADDRESS>wrote:

And running PHP 5.3+ I assume? When does this error occur? Just accessing your homepage?
Reply to this email directly or view it on GitHub:
https://github.com/symphonycms/symphony-2/issues/2362#issuecomment-76866626

What is a /vendor/autoload.php file? Why would I need that? Is this a new thing to Symphony 2.6.0?

What is a /vendor/autoload.php file? Why would I need that? Is this a new thing to Symphony 2.6.0?

Symphony 2.6 allows for installation via Composer, so there are two different possible autoload routes.

Yeah PHP 5.5+. But I’m not seeing the error anymore.

That's strange/scary?

@brendo Well I have since updated JIT and s3upload_field so either of those could have fixed it.

Symphony 2.6 allows for installation via Composer, so there are two different possible autoload routes.

Does this mean it would be possible to deploy Symphony via Heroku?

Does this mean it would be possible to deploy Symphony via Heroku?

No. Unfortunately as I just discovered. The other hurdle here is Postgres and the parsing of database information. That should be a little easier with PDO support.

The other hurdle here is Postgres and the parsing of database information.

Why is Postgres a hurdle? I am running several instances of Craft CMS on Heroku, using ClearDB:
https://medium.com/@aj1215/craft-cms-on-heroku-79b991665b0b
They parse the Clear DB config settings in Heroku like so:
$url=parse_url(getenv(“CLEARDB_DATABASE_URL”));

return array(
  ‘server’ => $url[“host”],
  ‘user’ => $url[“user”],
  ‘password’ => $url[“pass”],
  ‘database’ => substr($url[“path”],1),
  ‘tablePrefix’ => ‘craft’,
);

It works beautifully. Have you tried something like this with Symphony?

ClearDB has a free 5MB MySQL tier.

Hurdle as in, wouldn't work out of the box without applying the parse_url logic inside your config.php file (which would mean setting config to read-only once it's in production so it couldn't be overridden)

:+1: Got it!


Problème page configuration

hello , maybe somebody can help me :)
i have a problems with thé configuration
the instalaltion was good, when i open http://xxx.x.xx.xx/5000
its open pokemon go map config , i enter my informations and said me config has saved
http://prntscr.com/c39av3
but when i re open my vps:5000 the page rest in config , same problem when i stop the script and re laucnh it .

It doesn't look like you entered any accounts.

Yes i have entered account like that
Username1:password1Username2:password2Username3:password......

One user:password per line please.


Add support for multiple make processes under linux.

There will still only be one process under windows, but I went ahead and added the parameter's make variable to rules for windows anyway.

Serial execution of recipes is essential to development builds.
I added the ability to specify the number of jobs via MAKE_JOBS variable, which defaults to 1: c7ccc560d45d727b9d85e4f3244b726317b23dee

Wouldn't it have been a better solution to just remove the argument from development builds then? It's very preferable that I don't have to edit a makefile when I'm switching between targets, especially on the same platform.

By "development builds" I mean "everyday work".
You can do for example make linux-debug64 MAKE_JOBS=4 when you need fast build (tipically once per clone/rebuild) and just make linux-debug64 for everyday work. It's less typing for the most common use case.


FFT versus IFFT convention

Laserfun copies the PyNLO convention for the FFTs, which, in turn, copies it from laserFOAM. The FFT_t function is used to convert time to frequency. However, this function calls ifft (not fft). So, we're using the ifft to go from time to frequency, which seems backwards from the normal convention. What is happening?
    @at.setter
    def at(self, at_new):
        self.aw = FFT_t(at_new)

def FFT_t(A, ax=0):
    """Do a FFT with fft-shifting."""
    A = A.astype('complex128')
    return fft.ifftshift(fft.ifft(fft.fftshift(A, axes=(ax,)),
                                  axis=ax), axes=(ax,))

def IFFT_t(A, ax=0):
    """Do an iFFT with fft-shifting."""
    A = A.astype('complex128')
    return fft.ifftshift(fft.fft(fft.fftshift(A, axes=(ax,)),
                                 axis=ax), axes=(ax,))

Ah, this is explained on page 45 of Dudley's Supercontinuum Generation in Optical Fibers (see #13 for full context). He says that the Matlab definitions are flipped from his definitions. According to the matlab docs, we should expect the following behavior from the fft function:
X = [1 2 3 4 5];
Y = fft(X)
Y = 1×5 complex

  15.0000 + 0.0000i  -2.5000 + 3.4410i  -2.5000 + 0.8123i  -2.5000 - 0.8123i  -2.5000 - 3.4410i

I checked, and this is the same behavior in np.fft.fft. So, everything is fine! We just need to clarify the documentation for the FFT_t and IFFT_t functions to clarify.

I propose the following docstrings be added to the FFT_t and IFFT_t functions. Also, I don't understand why the functions are named with _t suffixes. Seems like we may as well just call them FFT and IFFT.
def FFT_t(A, ax=0):
    """Perform a forward FT to take an array of amplitudes in the TIME domain
    and transform them to the FREQUENCY domain.

    This function performs the FT, as well as the initial and final FFT shifts.
    The function of the final ifftshift is the usual shifting of the FT output
    to put the zero frequency components back in the center. The function of
    the initial fftshift is perhaps less obvious, but it is necessary in order
    to keep a time signal with a real peak in the center and return a frequency
    spectrum with all-real components.

    In other words, we need to take a "human readable" time domain array, flip
    it into the weird zero-at-the-edges format that the FFT likes, do the FFT,
    then flip the signal back. Confused? You're not alone.

    Note that this function uses np.fft.ifft, the inverse fft function, while
    it purports to perform a forward FFT. The secret to this brain-breaking
    madness can be found on Page 45 of Dudley's book "Supercontinuum Generation
    in Optical Fibers" (Cambridge, 2010) and as described here:
    https://github.com/laserfun/laserfun/issues/73
    The convention chosen for the NLSE FTs flips the usual convention, using
    the forward FFT to go from frequency to time.

    Parameters
    ----------
    A : numpy array, n-dimensional
        The TIME domain data to be Fourier transformed. The transform will only
        be performed along one axis.
    ax : int
        the axis that the FT should be performed along. Defaults to 0.

    Returns
    -------
    FT : numpy array, same dimensions as A
        the fourier-transformed data, now in the FREQUENCY domain.
    """

    return fft.ifftshift(fft.ifft(fft.fftshift(A, axes=(ax,)),
                                  axis=ax), axes=(ax,))

def IFFT_t(A, ax=0):
    """Perform an inverse FT to take an array of amplitudes in the FREQUENCY
    domain and transform them to the TIME domain.

    See documentation for FFT_t
    """
    A = A.astype('complex128')
    return fft.ifftshift(fft.fft(fft.fftshift(A, axes=(ax,)),
                                 axis=ax), axes=(ax,))

Oh, also, with the fftshift and ifftshift. If the array is even size, then it doesn't matter which is used. If the array is odd sized, then if does matter. Here is some code to check that the arrays aren't messed up with each fft cycle:
import numpy as np
from numpy import fft
import matplotlib.pyplot as plt

t_ps = np.linspace(-10, 10, 201)
power= 1
fwhm_ps = 1

fig, axs = plt.subplots(2, 1, figsize=(8, 8), tight_layout=True)

def FFT_t(A, ax=0):
    """Do a FFT with fft-shifting."""
    A = A.astype('complex128')
    return fft.ifftshift(fft.ifft(fft.fftshift(A, axes=(ax,)),
                                  axis=ax), axes=(ax,))

def IFFT_t(A, ax=0):
    """Do an iFFT with fft-shifting."""
    A = A.astype('complex128')
    return fft.ifftshift(fft.fft(fft.fftshift(A, axes=(ax,)),
                                 axis=ax), axes=(ax,))

def IFFT_t_wrong(A, ax=0):
    """Do an iFFT with fft-shifting."""
    A = A.astype('complex128')
    return fft.fftshift(fft.fft(fft.fftshift(A, axes=(ax,)),
                                 axis=ax), axes=(ax,))

x = np.sqrt(power)/np.cosh(t_ps/(fwhm_ps/1.76))

for n in range(10):
    x = FFT_t(IFFT_t(x))
    axs[0].plot(np.real(x))

x = np.sqrt(power)/np.cosh(t_ps/(fwhm_ps/1.76))

for n in range(10):
    x = FFT_t(IFFT_t_wrong(x))
    axs[1].plot(np.real(x))

axs[0].set_title('laserfun fftshift')
axs[1].set_title('incorrect fftshift')

plt.show()


Update go to 1.20.5

/retest

prow is failing with:
 Step 6/20 : RUN go mod download
 ---> Running in d7882463a58f
runtime/cgo: pthread_create failed: Operation not permitted

SIGABRT: abort

But the only change is going from go 1.20.4 to 1.20.5 so this should not be an issue

/retest

/retest

failed due to
 Waiting for deployment "olm-operator" rollout to finish: 0 of 1 updated replicas are available...
error: deployment "olm-operator" exceeded its progress deadline
Makefile:200: recipe for target 'kind-start' failed
make: *** [kind-start] Error 1

This should resolve with a retest or two

I believe it is due to the kind cluster update, and ODLM e2e test case is out of dated.
We have a ticket to track the update progress. https://github.ibm.com/IBMPrivateCloud/roadmap/issues/59167
I will merge the PR for now.


should iPhoneFramework.sh work from the command line?

When I run the iPhoneFramework.sh I get:
lipo: can't open input file: build/Release-iphoneos/libYAJLIOSDevice.a (No such file or directory)
There is a something existing under Example/TestApp/Frameworks, is that useful per the README instructions? I've also tried using the most recent release of the download and I can get that to seemingly build in a test Xcode 4.01 project but then can't import any of the headers in my example class.
I can run the test project from the cloned repo, just can't get it working in another project.

Released new pod as YAJLO. See new README.


XPlat Solution for reading XEL

Fixes #5541
Got it working on Windows but Linux segfaults. Still, Core vs Desktop qualifies as Xplat eh 😅

will merge this when tests pass because it's mostly some DLLs and I need them for another PR


Automatically sort the listing view by the "group by" variable (if any)

Not sure this really adds much since users can easily sort by any column. Closing as won't fix.


Expand mutation and introspection support

:wave: Hello! I've been doing some work to expand this library to support the pi-base project, and - while I don't think this is quite ready to go - I wanted to start a conversation about what if any of this you'd be open to merging upstream. The main things I'm looking for are:

Support for generating a schema.gql - the pi-base is currently writing that to disk here so that the typescript client can read it  and make sure the frontend stays in sync
As part of the above, we need to understand the difference between a query and mutation document; if we're going to declare those, we might as well actually use them at dispatch time
(Part of a previous commit, but) Object types should automatically support __typename introspection so that the client can cache records on (__typename, id).

TODO
I currently intend to tackle these on this branch

[ ] Expand Introspection to cover as much of the introspection spec as it reasonably can without major internal changes (the __Type > __Field > __Type part currently can't be modeled, and I don't plan on touching subscriptions or extensions yet)
[ ] Take a closer look at Interface and Union handling (I don't use either of these in my project, so just haven't thought about them)
[ ] Expand test coverage for new features
[ ] General cleanup / documentation writing

Some open questions / thoughts

I want to take a closer look at the resolver code. Importantly, fields in queries should probably be resolved in parallel if possible and top-level fields in mutations must (per the spec) be resolved serially. I'm not considering this a blocker for this PR, since the current story for running mutations is "just mutate stuff in a query handler" (I never send a query doc containing more than one mutation anyways), but if this seems important to address here, I can take a look.
I'd like for introspection to Just Work™ and not require manually mounting the exported handlers. Again, I think this'll require digging into the resolver logic more closely.

Let me know if you'd be open to pulling in work in this direction. Notes welcome if there are any tweaks at all that you'd like made here, large or small.

@teh - Awesome! I'll be working on finalizing and polishing this over the weekend then.
On the __Type > __Field > __Type thing ... see http://facebook.github.io/graphql/June2018/#sec-Schema-Introspection
The spec'd schema would need to look like
type Type__ = Object "__Type" '[]
  '[ Field "fields" Field__
   ]

type Field__ = Object "__Field" '[]
  '[ Field "type" Type__
   ]

and I got the impression (from an error or comment or something; I don't remember what now) that we couldn't (currently?) support that recursive type definition. I'm hazy on that though; if the above actually does compile, then I should be able to add that part as it stands.

@jamesdabbs-procore you are right, recursion can't be expressed directly with type. You can work around that with an opaque (to the type system) newtype. E.g. from one my my projects:
type UserQ = Object "User" '[] -- this is your GraphQL Object

-- recursion breakers:
newtype RecUserQ = RecUserQ (Handler QueryMonad UserQ)

instance HasResolver QueryMonad RecUserQ where
  type Handler QueryMonad RecUserQ = RecUserQ
  resolve (RecUserQ handler) = resolve @QueryMonad @UserQ handler

instance HasAnnotatedType RecUserQ where
  -- getAnnotatedType returns garbage but it works for now because
  -- we're not using it. See https://github.com/jml/graphql-api/issues/93
  getAnnotatedType = getAnnotatedType @Text

@jml Not super sure why the coverage ratchet passed for 8.0 but not for 8.2. Do you have any insight / ideas?

We're not running it for 8.0—it's of little extra value for the time it would take to set up.

It's not documented very well, but here's what'll happen with the coverage ratchet:

tests will fail if coverage is worse
if you make coverage better, tests will also fail
to make tests pass, you must update scripts/hpc-ratchet to have the correct missing lines

The reason we fail when coverage improves is to make sure that step 3 actually happens. Otherwise, improvements in one PR could be undone by the next. This way, we lock in any improvements, and move closer to the goal of 100% coverage.

Hey guys. Thanks for this PR. Schema introspection is something I have been looking forward to. Would you like any help here?


"Cannot create property 'sunPos' on number '1553157298585'"

When i trigger the sun-position with your example Code i get the Error:
"Cannot create property 'sunPos' on number '1553157298585'"
Latest Version ....
Do i something wrong ?

Thank you for this hint!
Will be fixed in version 0.2.8!


TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/52675

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/53416

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/54326

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/56890

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/63237

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/69384

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/75285

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/102044

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/108278


How do I generate textWithAnchorsFromAllWikipedia2014Feb.txt files?

Hi, Sorry to bother you again.
I want to generate Latest textWithAnchorsFromAllWikipedia documents
I noticed that you provided WikiExtractro.py to generate the above documents.

After reading the code, I want to ask how to get the input wiki file of the code, that is: the wikipedia dump file

What else should we pay attention to about the six parameters of the function?
Thank you for your reply.
Thank you!

Hi. The textWithAnchorsFromAllWikipedia file was generated using https://github.com/attardi/wikiextractor and the --links option to preserve hyperlinks. Hope it helps.


emitter bolts can mine

About the PR
instead of 20 shots for the heat damage to break it, emitter bolts are now just gathering projectiles
this means you can properly use them for epic laser mining
Why / Balance
with stock parts its much slower than just using a pick, mostly to just be cool
Technical details
no
Media
https://github.com/space-wizards/space-station-14/assets/39013340/3f8461ac-8248-4102-a85e-a5b7082a00c7

[X] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes
no
Changelog
:cl:

tweak: Emitters now destroy rocks in 1 hit like crushers and PKAs, you can use them for laser mining.

rock and stone merge now
we can have miner spaceships with this if salv cooperates with sci, can even use tethergun to move items to ship without leaving it
finally allows sci to help salv back for what salv gives to sci

rock and stone merge now we can have miner spaceships with this if salv cooperates with sci, can even use tethergun to move items to ship without leaving it finally allows sci to help salv back for what salv gives to sci

Actual mining ships should use something better like proper ship guns or a laser.

yaml only mining laser just copy emitter and up the firerate


Create git-test-file

Please don't do this here. Use your own repositories if you'd like to test something about git/GitHub.